1 条题解

  • 0
    @ 2024-9-4 21:06:31
    #include <bits/stdc++.h>
    using namespace std;
    struct Node {
    	int a, b, h; // a长,b宽,h高  (a > b)
    } a[100];
    bool cmp(Node a, Node b) {
    	return a.a > b.a || a.a == b.a && a.b > b.b;
    }
    int n, f[100];
    
    int main() {
    	for (int cas = 1; ; cas++) {
    		scanf("%d", &n);
    		if (!n)
    			break;
    		for (int i = 1; i <= n; i++) {
    			scanf("%d%d%d", &a[i].a, &a[i].b, &a[i].h);
    			a[i+n] = {a[i].b, a[i].h, a[i].a};
    			a[i+2*n] = {a[i].h, a[i].a, a[i].b};
    		}
    		n *= 3;
    		for (int i = 1; i <= n; i++)
    			if (a[i].a < a[i].b)
    				swap(a[i].a, a[i].b);
    		sort(a+1, a+n+1, cmp);
    		int ans = 0;
    		for (int i = 1; i <= n; i++) {
    			f[i] = a[i].h;
    			for (int j = 1; j < i; j++)
    				if (a[j].a > a[i].a && a[j].b > a[i].b)
    					f[i] = max(f[i], f[j] + a[i].h);
    			ans = max(ans, f[i]);
    		}
    		printf("Case %d: maximum height = %d\n", cas, ans);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    18
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    11
    已通过
    5
    上传者