zoj 1093 Monkey and Banana
来源:互联网 发布:java工程师资格证 编辑:程序博客网 时间:2024/05/21 13:22
#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#include<algorithm>using namespace std;typedef struct{ int x; int y; int h; }edge;edge block[181];int cmp(edge a1,edge a2){ if(a1.x!=a2.x) return a1.x<a2.x; else if(a1.y!=a2.y) return a2.x<a2.y; else return a1.h<a2.h; }int main(){ int n,i,j,a[3]; int t=0; while(scanf("%d",&n)&&n) { for(i=0;i<n;i++) { scanf("%d%d%d",&a[0],&a[1],&a[2]); sort(a,a+3); block[i*3].x=a[0]; block[i*3].y=a[1]; block[i*3].h=a[2]; block[i*3+1].x=a[0]; block[i*3+1].y=a[2]; block[i*3+1].h=a[1]; block[i*3+2].x=a[1]; block[i*3+2].y=a[2]; block[i*3+2].h=a[0]; } sort(block,block+n*3,cmp); for(i=0;i<n*3;i++) { int max=0; for(j=0;j<i;j++)//找最大上升子序列 { if(block[j].x<block[i].x&&block[j].y<block[i].y&&block[j].h>max) max=block[j].h; } block[i].h+=max; } int maxh=0; for(i=0;i<n*3;i++) { if(block[i].h>maxh) maxh=block[i].h; } t++; printf("Case %d: maximum height = %d\n",t,maxh); } system("pause"); return 0;}