hdu 1069

 //Accepted    264 KB    0 ms
 //每种block只有三种方法,且每种放法至多放一次
 //规定三条边的顺序后
 //把所有的block按x递增排序,x相同则按y递增排序
 //然后dp
 //dp[i]=max(dp[i],dp[j]+height[i]) i可以放到j上
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 #include <algorithm>
 using namespace std;
 ;
 struct node
 {
     int x,y,z;
 }p[*imax_n];
 *imax_n];
 int n;
 int max(int a,int b)
 {
     return a>b?a:b;
 }
 int min(int a,int b)
 {
     return a<b?a:b;
 }
 void Dp()
 {
     memset(dp,,sizeof(dp));
     ;i<=*n;i++)
     {
         ;j<i;j++)
         if (p[j].x<p[i].x && p[j].y<p[i].y)
         dp[i]=max(dp[i],dp[j]+p[i].z);
     }
     ;
     ;i<=*n;i++)
     ans=max(ans,dp[i]);
     printf("%d\n",ans);
 }
 int cmp(struct node p1,struct node p2)
 {
     ;
     if (p1.x==p2.x)
     {
         ;
     }
     ;
 }
 int main()
 {
     ;
     while (scanf("%d",&n),n)
     {
         ;i<=n;i++)
         {
             int x,y,z;
             scanf("%d%d%d",&x,&y,&z);
             p[*i-].x=min(x,y);
             p[*i-].y=max(x,y);
             p[*i-].z=z;
             p[*i-].x=min(x,z);
             p[*i-].y=max(x,z);
             p[*i-].z=y;
             p[*i].x=min(y,z);
             p[*i].y=max(y,z);
             p[*i].z=x;
         }
         sort(p+,p+*n+,cmp);
         printf("Case %d: maximum height = ",++t);
         Dp();
     }
     ;
 }
上一篇:【转】Spring Bean属性解析


下一篇:Having关键字