HDU
来源:互联网 发布:西安财经大学行知学院 编辑:程序博客网 时间:2024/06/17 12:15
题目大意:给出一系列方块,要求上面的方块长宽都比下面的小,问最高能叠多高。每个方块可以翻转,并且个数不限。
解题思路:可以翻转意味着一组长宽高能有 6 种摆放方式,列出所有方式按照长宽排序,dp记录当前方块之前能够叠的最高高度。
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#include<map>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))const int INF = 0x3f3f3f3f;const int NINF = -INF -1;const int MAXN = 180+5;using namespace std;struct point { int x, y, z;};point p[MAXN];int dp[MAXN];int n, ans, cnt = 0;bool cmp(point a, point b) { if (a.x == b.x) return a.y < b.y; return a.x < b.x;}int main() { while (scanf("%d", &n) && n) { memset(dp, 0, sizeof(dp)); int t = 0; int x, y, z; for (int i = 0; i < n; i++) { scanf("%d%d%d", &x, &y, &z); p[t].x = x, p[t].y = y, p[t].z = z, t++; p[t].x = x, p[t].y = z, p[t].z = y, t++; p[t].x = y, p[t].y = x, p[t].z = z, t++; p[t].x = y, p[t].y = z, p[t].z = x, t++; p[t].x = z, p[t].y = x, p[t].z = y, t++; p[t].x = z, p[t].y = y, p[t].z = x, t++; } sort(p, p+t, cmp);// for (int i = 0; i < t; i++)// printf("%d %d %d\n", p[i].x, p[i].y, p[i].z); dp[0] = p[0].z; ans = 0; for (int i = 1; i < t; i++) { dp[i] = p[i].z; for (int j = 0; j < i; j++) if (p[j].x < p[i].x && p[j].y < p[i].y) dp[i] = max(dp[j]+p[i].z, dp[i]);// printf("%d %d\n", i, dp[i]); if (dp[i] > ans) ans = dp[i]; } printf("Case %d: maximum height = %d\n", ++cnt, ans); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 论fork()函数与Linux中的多线程编程
- Google ArCore
- eclipse新建maven的web项目时,pom.xml的war报错解决方法
- Qt 自定义 滚动条 样式
- jQuery Mobile中选择select的data-*选项
- HDU
- ajax对json数据的处理
- 空指针异常 anko for Android findviewbyId fragment ondestoryView
- intellij idea 一行函数默认不折叠
- UITableView HeaderView和FooterView的悬浮(粘性)解决方法
- 国人福利 Vultr开始支持支付宝了
- 【多校训练】hdu 6136 Death Podracing 优先队列
- 梯度提升树(GBDT)原理小结
- jQuery Mobile中滑动块range的data-*选项