範例程式碼 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);
}
}