UVa437

来源:互联网 发布:linux系统字体中文乱码 编辑:程序博客网 时间:2024/04/29 20:30

用二元组(idx,k)表示状态

idx为顶面立方体序号,k是高的序号。

状态(3,1)就是这个立方体在顶面,且高是b

#include<bits/stdc++.h>using namespace std;struct node{    int x,y,z;    void f(int a,int b,int c){ x=a,y=b,z=c; }}st[200];bool cmp(node a,node b){    if(a.x*a.y < b.x*b.y) return 1; return 0;}int n,m,x,y,z,dp[200];int main(){    int flag=1;    while(scanf("%d",&n)&&n){        m=0;        int i,j;        for(i=0;i<n;i++){            scanf("%d%d%d",&x,&y,&z);            st[ m++].f(x,y,z);     //将6种立方体均保存起来            st[ m++].f(x,z,y);            st[ m++].f(y,z,x);            st[ m++].f(y,x,z);            st[ m++].f(z,x,y);            st[ m++].f(z,y,x);        }        sort(st,st+m,cmp);        int t=0;        for(i=0;i<m;i++){            dp[i]=st[i].z;            for(j=0;j<i;j++)                if(st[i].x>st[j].x &&st[i].y>st[j].y)                dp[i]=max(dp[i],dp[j]+st[i].z);                if(dp[i]>t) t=dp[i];        }        printf("Case %d: maximum height = %d\n",flag++,t);    }    return 0;}


0 0
原创粉丝点击