HDU 1069 Monkey and Banana——DP
每个长方体有六种情况,全部保存到cub数组中,排序后dp求出以长方体i结尾的最大高度,然后遍历一遍求最大值
#include #include #include #include using namespace std;int n, flag = 0, dp[2000];struct Cub { int x, y, z; bool operator < (const Cub &c) { if (x != c.x) return x < c.x; return y < c.y; }}cub[2000];int main(){ while (scanf("%d", &n) == 1 && n) { int cnt = 0; for (int i = 0; i < n; i++) { int x, y, z; scanf("%d %d %d", &x, &y, &z); cub[cnt].x = x, cub[cnt].y = y, cub[cnt].z = z, cnt++; cub[cnt].x = x, cub[cnt].y = z, cub[cnt].z = y, cnt++; cub[cnt].x = y, cub[cnt].y = x, cub[cnt].z = z, cnt++; cub[cnt].x = y, cub[cnt].y = z, cub[cnt].z = x, cnt++; cub[cnt].x = z, cub[cnt].y = x, cub[cnt].z = y, cnt++; cub[cnt].x = z, cub[cnt].y = y, cub[cnt].z = x, cnt++; } sort(cub, cub + cnt); for (int i = 0; i < cnt; i++) { int maxv = 0; for (int j = 0; j < i; j++) { if (cub[j].x < cub[i].x && cub[j].y < cub[i].y) { maxv = max(maxv, dp[j]); } } dp[i] = maxv + cub[i].z; } int ans = 0; for (int i = 0; i < cnt; i++) { ans = max(ans, dp[i]); } printf("Case %d: maximum height = %d\n", ++flag, ans); } return 0;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~