最大递增子序列变形——二维带权值 O(n*n) HDU1069
2015-07-22 18:55
441 查看
#include <cstring> #include <iostream> #include <algorithm> using namespace std; int tmp[30][3]; int dp[100]; class Node { public: int x; int y; int h; bool operator <(const Node&n) const { if(x==n.x) return y<n.y; else return x<n.x; } }; Node arr[100]; int se[100][2]; int main() { int n; int sign=0; while(cin>>n&&n!=0) { sign++; int num=0; memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { cin>>tmp[i][0]>>tmp[i][1]>>tmp[i][2]; sort(tmp[i],tmp[i]+3); arr[num].x=tmp[i][2]; arr[num].y=tmp[i][1]; arr[num].h=tmp[i][0]; num++; arr[num].x=tmp[i][1]; arr[num].y=tmp[i][0]; arr[num].h=tmp[i][2]; num++; arr[num].x=tmp[i][2]; arr[num].y=tmp[i][0]; arr[num].h=tmp[i][1]; num++; } sort(arr,arr+num); for(int i=0;i<num;i++) { dp[i]=arr[i].h; for(int j=0;j<i;j++) if(arr[i].x>arr[j].x&arr[i].y>arr[j].y) dp[i]=max(dp[j]+arr[i].h,dp[i]); } int mi=0; for(int i=0;i<num;i++) { if(mi<dp[i]) mi=dp[i]; } cout<<"Case "<<sign<<": maximum height = "<<mi<<endl; } return 0; }
相关文章推荐
- 开门人与关门人
- swfit中文学习
- Linux基本命令
- PHP生成百万个UID存入文件、插入数据库
- 在多浏览器使用JS复制内容到剪切板,无需插件
- Js_特效II
- hdoj 2502 月之数
- 开门人与关门人
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现
- PHP基础
- Android 经过美化的柱状图....
- 刨根问底Objective-C Runtime(4)- 成员变量与属性
- toString
- OC当中字典的用法
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
- 刨根问底Objective-C Runtime(3)- 消息 和 Category
- Ubuntu15.04 QTCreator支持中文输入
- C# 创建文件夹及文件
- oracle所有操作
- python基础教程总结10——文件