hdu 1069 动态规划 经典题

来源:互联网 发布:荀彧 诸葛亮 知乎 编辑:程序博客网 时间:2024/06/06 12:47
//每种坐标有三种高,每种高有两种情况,最多只有180种情况。先对x排序,x相等时对y排序,然后按照提议dp处理 #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct elem{int x;int y;int z;}dp[200];bool cmp(elem a,elem b){if(a.x<b.x) return 1;else if(a.x==b.x&&a.y<b.y) return 1;else return 0;}int main(){int xx,yy,zz;int n;int l=0;int cas=0;while(~scanf("%d",&n)&&n){cas++;l=0;int i;for(i=1;i<=n;i++){scanf("%d%d%d",&xx,&yy,&zz);dp[l].x=xx;dp[l].y=yy;dp[l].z=zz;l++;dp[l].x=yy;dp[l].y=xx;dp[l].z=zz;l++;dp[l].x=xx;dp[l].y=zz;dp[l].z=yy;l++;dp[l].x=zz;dp[l].y=xx;dp[l].z=yy;l++;dp[l].x=zz;dp[l].y=yy;dp[l].z=xx;l++;dp[l].x=yy;dp[l].y=zz;dp[l].z=xx;}sort(dp,dp+l,cmp);int j;for(i=1;i<l;i++){int tmp=0;for(j=0;j<i;j++){if((dp[j].x<dp[i].x&&dp[j].y<dp[i].y)&&tmp<dp[j].z){tmp=dp[j].z;}}dp[i].z+=tmp;}int maxn=0;for(i=0;i<l;i++)if(maxn<dp[i].z) maxn=dp[i].z;printf("Case %d: maximum height = %d\n",cas,maxn);}return 0;}

0 0
原创粉丝点击