HDU1069(DAG)
来源:互联网 发布:淘宝商家发货流程 编辑:程序博客网 时间:2024/06/05 22:59
最简单的DAG了,只需要排个序,dp【i】 代表以第i个为结尾可以堆成的最大高度。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>#include <stack>#include <queue>#include <list>#include <cmath>using namespace std;#define cir(a,b) memset(a,b,sizeof a)typedef long long LL;const int maxn = 10000+10;const int INF = 1e9+10;int n;struct Brick{ int l,w,h;}s[maxn];int dp[maxn];bool cmp(const Brick& t1,const Brick& t2){ if(t1.l==t2.l) return t1.w<t2.w; else return t1.l<t2.l;}int kase;int main(){ kase = 1; while(cin >> n && n) { cir(dp,0); int E = 1; int l,w,h; for(int i=0;i<10000;i++) { s[i].h = 0; } for(int i=1;i<=n;i++) { cin >> l >> w >> h; s[E].l = l,s[E].w = w,s[E++].h = h; s[E].l = l,s[E].w = h,s[E++].h = w; s[E].l = w,s[E].w = l,s[E++].h = h; s[E].l = w,s[E].w = h,s[E++].h = l; s[E].l = h,s[E].w = l,s[E++].h = w; s[E].l = h,s[E].w = w,s[E++].h = l; } //cout << "E : " << E <<endl; sort(s+1,s+E+1,cmp); int Max = -1; for(int i=1;i<=E;i++) dp[i] = s[i].h; for(int i=1;i<=E;i++) { for(int j=1;j<=i;j++) { if(s[i].l > s[j].l && s[i].w > s[j].w) { dp[i] = max ( dp[i],dp[j]+s[i].h ); } } Max = max( dp[i],Max ); //cout << s[i].l << " " << s[i].w << " " << s[i].h << " " <<endl; } printf("Case %d: maximum height = ",kase++); cout << Max << endl; //cout << H <<endl; } return 0;}
阅读全文
0 0
- HDU1069(DAG)
- hdu1069
- hdu1069
- hdu1069
- hdu1069
- HDU1069
- hdu1069
- HDU1069
- hdu1069
- hdu1069
- HDU1069
- HDU1069
- DAG
- DAG
- hdu1069(dp)
- HDU1069--Monkey and Banana
- hdu1069 Monkey and Banana
- hdu1069 Monkey and Banana
- java并发机制
- Linux中find常见用法
- mysql知识点
- MFC连接access制作登录界面
- [JavaEE] JPA中的Primary Key的几种生成方式
- HDU1069(DAG)
- 离散题目5
- Java float型数据判断是否相等
- Tomcat数据库连接池的配置方法总结
- SDUT 3805 离散题目11
- 读书的作用--引用《儒道至圣》小说章节
- JS中的caller属性
- VC中#pragma小结
- 夜神模拟器与Android studio连接