UVa 437 巴比伦塔

时间:2025-04-27 10:35:20

https://vjudge.net/problem/UVA-437

这道题和HDU的Monkey and Banana完全一样。

 #include<iostream>
#include<algorithm>
using namespace std; struct node
{
int l, w, h;
}v[]; int dp[]; //存储第i块立方体为底时的最大高度 bool cmp(node x, node y) //sort的排序方法,按长从小到大排序
{
/*
if (x.l < y.l) return 1;
else if (x.l == y.l && x.w < y.w) return 1;
else return 0;
*/ if (x.l == y.l) return x.w < y.w;
return x.l < y.l;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int n, a, b, c;
int kase = ;
while (cin >> n && n)
{
int k = ;
for (int i = ; i < n; i++)
{
cin >> a >> b >> c;
v[k].l = a; v[k].w = b; v[k++].h = c;
v[k].l = a; v[k].w = c; v[k++].h = b;
v[k].l = b; v[k].w = a; v[k++].h = c;
v[k].l = b; v[k].w = c; v[k++].h = a;
v[k].l = c; v[k].w = a; v[k++].h = b;
v[k].l = c; v[k].w = b; v[k++].h = a;
}
sort(v, v + k, cmp);
int maxn = ;
for (int i = ; i < k; i++)
{
dp[i]=v[i].h;
for (int j = ; j < i; j++)
{
if (v[j].l < v[i].l && v[j].w < v[i].w) //如果第j块能搭在第i块上
{
dp[i] = max(dp[i], dp[j] + v[i].h);
}
}
if (dp[i]>maxn) maxn = dp[i];
}
cout << "Case " << ++kase << ": maximum height = " << maxn << endl;
}
return ;
}