首页 > 代码库 > ZOJ - 1093 Monkey and Banana
ZOJ - 1093 Monkey and Banana
DAG嵌套模型,状态方程由1改成高度就行。
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #define doumax(a,b) (a>b?a:b) 5 const int maxn=100; 6 int mat[maxn][maxn],dp[maxn],n,a[35][5],nodenum; 7 struct node{ 8 int l,w,h; 9 void init(int x,int y,int z)10 {11 l=x;w=y;h=z;12 }13 bool operator<(const node & temp)14 {15 return l<temp.l && w<temp.w;16 }17 }block[maxn];18 int dpmodel(int i);19 int main()20 {21 int t=1;22 while(scanf("%d",&n)==1 && n){23 nodenum=0;24 memset(mat,0,sizeof(mat));25 memset(dp,0,sizeof(dp));26 for(int i=0;i<n;i++){27 scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);28 std::sort(a[i],a[i]+3);29 for(int j=0;j<2;j++)30 for(int k=j+1;k<3;k++)31 block[++nodenum].init(a[i][j],a[i][k],a[i][3-j-k]);32 }33 for(int i=1;i<=nodenum;i++)34 for(int j=i+1;j<=nodenum;j++){35 if(block[i]<block[j])36 mat[i][j]=1;37 else if(block[j]<block[i])38 mat[j][i]=1;39 }40 int maxheight=0;41 for(int i=1;i<=nodenum;i++){42 if(!dp[i]){43 int ans=dpmodel(i);44 if(maxheight<ans)45 maxheight=ans;46 }47 }48 printf("Case %d: maximum height = %d\n",t++,maxheight);49 }50 return 0;51 }52 int dpmodel(int i)53 {54 if(dp[i]>0)55 return dp[i];56 dp[i]=block[i].h;57 for(int j=1;j<=nodenum;j++)58 if(mat[i][j])59 dp[i]=doumax(dp[i],dpmodel(j)+block[i].h);60 return dp[i];61 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。