hdu 1069 Monkey and Banana

http://acm.hdu.edu.cn/showproblem.php?pid=1069

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define maxn 1000
 5 using namespace std;
 6 
 7 struct node
 8 {
 9     int x,y,z;
10     bool operator <(const node &a)const
11     {
12         return (x<a.x)||(x==a.x&&y<a.y);
13     }
14 }p[maxn];
15 int n,x,y,z;
16 int dp[maxn];
17 int main()
18 {
19     int t=0;
20     while(scanf("%d",&n)&&n)
21     {
22         int num=0;
23         for(int i=0; i<n; i++)
24         {
25             scanf("%d%d%d",&x,&y,&z);
26             p[num].x=x;p[num+1].x=x;p[num+2].y=x;p[num+3].z=x;p[num+4].y=x;p[num+5].z=x;
27             p[num].y=y;p[num+1].z=y;p[num+2].x=y;p[num+3].x=y;p[num+4].z=y;p[num+5].y=y;
28             p[num].z=z;p[num+1].y=z;p[num+2].z=z;p[num+3].y=z;p[num+4].x=z;p[num+5].x=z;
29             num+=6;
30         }
31         sort(p,p+num);
32         int max1=0;
33         memset(dp,0,sizeof(dp));
34         dp[0]=p[0].z;
35         for(int i=1; i<num; i++)
36         {
37             int min1=0;
38             for(int j=i-1; j>=0; j--)
39             {
40                 if(p[i].y>p[j].y&&dp[j]>min1&&p[i].x>p[j].x)
41                 {
42                     min1=dp[j];
43                 }
44             }
45             dp[i]=min1+p[i].z;
46             if(dp[i]>max1)
47             {
48                 max1=dp[i];
49             }
50         }
51         t++;
52         printf("Case %d: maximum height = %d\n",t,max1);
53     }
54     return 0;
55 }
View Code

 

posted @ 2014-01-19 15:47  null1019  阅读(127)  评论(0编辑  收藏  举报