题目
1 #include <stdio.h> 2 3 typedef struct{ 4 int s; //面积 5 int h; //高 6 int a; //长或宽 7 int b; 8 }block; 9 block blo[100], temp; 10 11 int getmin(int a, int b){ 12 return a < b ? a : b; 13 } 14 15 int getmax(int a, int b){ 16 return a > b ? a : b; 17 } 18 19 int sort(int n){ 20 int i, j; 21 for(i = 1; i < n * 3; i ++){ 22 for(j = 0; j < i; j ++){ 23 if(blo[i].s > blo[j].s){ 24 temp = blo[i]; 25 blo[i] = blo[j]; 26 blo[j] = temp; 27 } 28 } 29 } 30 } 31 32 int main(){ 33 int n, i, j, x, y, z, k, max, cout = 1; 34 while(scanf("%d", &n) && n){ 35 k = 0; 36 for(i = 0; i < n; i ++){ 37 scanf("%d %d %d", &x, &y, &z); 38 blo[k].s = x * y; //将长宽高分成三种情况 39 blo[k].h = z; 40 blo[k].a = getmax(x, y); 41 blo[k].b = getmin(x, y); 42 k ++; 43 blo[k].s = x * z; 44 blo[k].h = y; 45 blo[k].a = getmax(x, z); 46 blo[k].b = getmin(x, z); 47 k ++; 48 blo[k].s = z * y; 49 blo[k].h = x; 50 blo[k].a = getmax(z, y); 51 blo[k].b = getmin(z, y); 52 k ++; 53 } 54 sort(n); 55 /*for(i = 0; i < n * 3; i ++){ 56 printf("%d %d %d\n" , blo[i].s, blo[i].a,blo[i].h); 57 }*/ 58 for(i = 0; i < n * 3; i ++){ //核心代码 59 max = 0; 60 for(j = 0; j < i; j ++){ 61 if(blo[i].a < blo[j].a && blo[i].b < blo[j].b){ 62 if(blo[j].h > max){ 63 max = blo[j].h; 64 } 65 } 66 } 67 blo[i].h += max; //动态选取最大的高 68 } 69 max = blo[0].h; 70 for(i = 1; i < n * 3; i ++){ 71 if(max < blo[i].h){ 72 max = blo[i].h; 73 } 74 } 75 printf("Case %d: maximum height = %d\n", cout, max); 76 cout ++; 77 } 78 return 0; 79 }