动态规划,暴力!!!! O(∩_∩)O~ #include <iostream> #include <algorithm> using namespace std; struct node { int x; int y; int z; }; bool cmp(node a, node b) { if(a.x != b.x) return a.x > b.x; return a.y > b.y; } node a[1000]; int main() { /*freopen("1.txt", "r", stdin); freopen("res2.txt", "w", stdout);*/ int n, x, y, z, tt = 1; while(scanf("%d", &n) != EOF && n) { int t = 1; for(int i = 1; i <= n; i++) { scanf("%d %d %d", &x, &y, &z); a[t].x = x, a[t].y = y, a[t].z = z; t++; a[t].x = x, a[t].y = z, a[t].z = y; t++; a[t].x = y, a[t].y = x, a[t].z = z; t++; a[t].x = y, a[t].y = z, a[t].z = x; t++; a[t].x = z, a[t].y = x, a[t].z = y; t++; a[t].x = z, a[t].y = y, a[t].z = x; t++; } sort(a+1, a+t, cmp); int b[200][200], maxx; for(int i = 1; i < t; i++) b[1][i] = a[i].z; for(int i = 2; i < t; i++) { for(int j = 1; j < t; j++) { maxx = 0; for(int k = 1; k < j; k++) { if(a[k].x > a[j].x && a[k].y > a[j].y && maxx < b[i-1][k]) maxx = b[i-1][k]; } b[i][j] = maxx+a[j].z; } } int res = 0; for(int i = 1; i < t; i++) { for(int j = 1; j < t; j++) { if(res < b[i][j]) res = b[i][j]; } } printf("Case %d: maximum height = %d/n", tt++, res); } return 0; }