hdu 1068 最大子序列和变形,,,
2016-11-26 20:24
323 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 200 using namespace std; struct node { int x,y,z; }; int cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int mymax(int x,int y) { if(x>y) return x; return y; } int main() { int n; int Case=0; while(cin>>n&&n) { node fuck[maxn]; int dp[maxn]; memset(dp,0,sizeof(dp)); int ret=0; while(n--) { int x,y,z; cin>>x>>y>>z; fuck[ret].x=x,fuck[ret].y=y,fuck[ret++].z=z; fuck[ret].x=x,fuck[ret].y=z,fuck[ret++].z=y; fuck[ret].x=y,fuck[ret].y=x,fuck[ret++].z=z; fuck[ret].x=y,fuck[ret].y=z,fuck[ret++].z=x; fuck[ret].x=z,fuck[ret].y=x,fuck[ret++].z=y; fuck[ret].x=z,fuck[ret].y=y,fuck[ret++].z=x; } sort(fuck,fuck+ret,cmp); dp[0]=fuck[0].z; for(int i=1;i<ret;i++) { dp[i]=fuck[i].z; for(int j=0;j<i;j++) { if(fuck[j].x<fuck[i].x&&fuck[j].y<fuck[i].y) { dp[i]=mymax(dp[i],dp[j]+fuck[i].z); } } } //这里的dp只是算出了每个i对应的值 并没有算出最大的 int zz=dp[0]; for(int i=1;i<ret;i++) if(zz<dp[i]) zz=dp[i]; printf("Case %d: maximum height = %d\n",++Case,zz); } return 0; }
相关文章推荐
- hdu 1243 反恐训练营(dp 最大公共子序列变形)
- HDU 5586 最大连续子序列和变形
- hdu 1422 最大子序列和问题的变形,最长非负子序列
- HDU 1069 Monkey and Banana(最大下降子序列和变形)
- hdu - To The Max-1081 - 最大子矩阵 - 最大连续子序列和变形/动态规划
- HDU 1069 最大子序列和(不连续)变形
- HDU 1231 最大连续子序列
- HDU 1003 Max Sum(最大连续子序列和)
- hdu 1231 最大连续子序列
- HDU_1231 最大连续子序列
- HDU-1068 Girls and Boys 最大独立子集
- HDU-1068 最大独立集
- HDU 1231 最大连续子序列 (dp)
- HDU 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1003 最大子序列和 简单题
- HDU 1081 To The Max(最大连续子序列和(二维))
- hdu 1231 最大连续子序列
- hdu 1024 Max Sum Plus Plus m段连续子序列最大和 dp
- hdu 1068 boys and girls(最大独立点集 ,匈牙利算法)