zoj1093

动态规划类题目

#include<stdio.h>
#include<stdlib.h>
typedef struct aa{   
   int x,y,z;     
}S;
S d[100]; 
int cmp(const void *_p,const void *_q) 
{    
     S *p = (S *)_p;    
     S *q = (S *)_q;    
     if( p->x == q->x) 
       return p->y - q->y;   
     return p->x - q->x; 
}
int main()
{    
   int N,i,j,a,b,c,a1,b1,c1,cnt = 1,max;     
   while(scanf("%d",&N),N)    
   {        
      for(i = 1; i <= N*3; i += 3)        
      {            
         scanf("%d%d%d",&a,&b,&c);            
         a1 = a; if(a1 > b) a1 = b; if(a1 > c) a1 = c; 
         c1 = a; if(c1 < b) c1 = b; if(c1 < c) c1 = c;         
         b1 = a + b + c - a1 - c1;            
         d[i].x = c1; d[i].y = b1; d[i].z = a1;            
         d[i+1].x = b1; d[i+1].y = a1; d[i+1].z = c1;            
         d[i+2].x = c1; d[i+2].y = a1; d[i+2].z = b1;        
      }        
      d[0].x = d[0].y = d[0].z = 0;        
      qsort( d, N*3 + 1, sizeof(d[0]),cmp);       
      for(i = 0; i <= N*3; i++)        
      {            
         max = 0;            
         for(j = 0; j < i; j++)            
         {                
            if(d[i].x > d[j].x && d[i].y > d[j].y && d[j].z > max)             
            max = d[j].z; 
         }            
         d[i].z += max;      
      }        
      max = 0;        
      for(i = 0; i <= N*3; i++)        
      {            
         if(d[i].z > max)                
           max = d[i].z;       
      }        
      printf("Case %d: maximum height = %d\n",cnt,max);        
      cnt++;        
   }    
   return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值