437 - The Tower of Babylon

2014-11-24 03:07:13 · 作者: · 浏览: 1
[cpp]
描述:给出n种长方体,每种长方体无数个,将这些长方体按照长和宽依次递减的趋势依次增加高度,求最大的高度是多少
#include
#include
int n,m,t,sum;
int arr[100][3];
int max(int x,int y)
{
return x>y x:y;
}
void swap(int &x,int &y)
{
if(x>y)
{
int temp=x;
x=y;
y=temp;
}
}
int cmp(const void *p1,const void *p2)
{
if(((int *)p1)[1]>((int *)p2)[1]) return 1;
else if(((int *)p1)[1]<((int *)p2)[1]) return -1;
else
{
if(((int *)p1)[2]>((int *)p2)[2]) return 1;
else return -1;
}
}
int main()
{
// freopen("a.txt","r",stdin);
t=1;
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
n*=3;
sum=0;
for(int i=0; i
{
scanf("%d %d %d",&arr[i][0],&arr[i][1],&arr[i][2]);
sum=max(max(max(arr[i][0],arr[i][1]),arr[i][2]),sum);
arr[i+1][0]=arr[i][1],arr[i+1][1]=arr[i][2],arr[i+1][2]=arr[i][0];
arr[i+2][0]=arr[i][2],arr[i+2][1]=arr[i][0],arr[i+2][2]=arr[i][1];
swap(arr[i][1],arr[i][2]);
swap(arr[i+1][1],arr[i+1][2]);
swap(arr[i+2][1],arr[i+2][2]);
i+=2;
}
qsort(arr,n,sizeof(arr[0]),cmp);
for(int i=n-2; i>=0; i--)
{
m=0;
for(int j=n-1; j>i; j--)
if(arr[i][1]
arr[i][0]+=m;
if(arr[i][0]>sum) sum=arr[i][0];
}
printf("Case %d: maximum height = %d\n",t++,sum);
}
return 0;
}