範例程式碼 uva437
//uva437
#include <cstdio>
using namespace std;
int main()
{
struct {
int x, y, z;
} a[200], temp;
int n, m;
int x, y, z;
int Case = 0;
scanf("%d", &n);
while (n != 0 ) {
m=0;
for (int k=0; k < n; k++) {
scanf("%d %d %d", &x, &y, &z);
a[m++] = {x, y, z}; // 將六種可能的x,y,z均存入
a[m++] = {x, z, y};
a[m++] = {y, x, z};
a[m++] = {y, z, x};
a[m++] = {z, x, y};
a[m++] = {z, y, x};
}
for (int i=0; i < m-1; i++) // bubble sort, x 由小而大
for (int j=0; j < m-1; j++) //資料量少,不設終止條件
if (a[j].x > a[j+1].x) {
temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; //swap
}
int height[200]; //累積的高度
int maxH = 0;
for (int i=0; i < m; i++) {
height[i]=a[i].z; // 每一個至少有自己的高度
for (int j=0; j < i; j++) // 嘗試每一個j
if ((a[i].x > a[j].x) && (a[i].y > a[j].y)) // i 可以放在j之下
if (height[i] < height[j] + a[i].z)
height[i]=height[j]+a[i].z; // 更新高度
if (maxH < height[i])
maxH=height[i]; //更新整體高度
}
Case++;
printf("Case %d: maximum height = %d\n", Case, maxH);
scanf("%d", &n);
}
}