HDU-1069-Monkey and Banana-DP
来源:互联网 发布:windows movie make 编辑:程序博客网 时间:2024/05/29 19:33
题目连接
题意:n个箱子,每个箱子有无数个,有长宽高,一个箱子要放在另外一个箱子上的条件是 长宽严格小于下面那个。并且箱子可以自由反转
思路:说是无数个,其实每个箱子最多用三次。提取出每个箱子的长宽,以长宽为关键字排序。进行dpdp[i]=max(dp[j]+a.h)
#include<bits/stdc++.h>using namespace std;struct NODE { long long x, y, h;}a[111];void swa(int p) { if(a[p].x > a[p].y) swap(a[p].x, a[p].y);}bool cmp(const NODE a, const NODE b) { if(a.x == b.x) return a.y < b.y; return a.x < b.x;}long long dp[111];int main(){ int n; int kase = 0; long long xa, xb, xc; while(scanf("%d", &n) && (n != 0)) { for(int i = 1; i <= n; i++) { scanf("%lld%lld%lld", &xa, &xb, &xc); a[i * 3 - 2].x = xa; a[i * 3 - 2].y = xb; a[i * 3 - 2].h = xc; swa(i * 3 - 2); a[i * 3 - 1].x = xa; a[i * 3 - 1].y = xc; a[i * 3 - 1].h = xb; swa(i * 3 - 1); a[i * 3].x = xc; a[i * 3].y = xb; a[i * 3].h = xa; swa(i * 3); } n = 3 * n; sort(a + 1, a + n + 1, cmp); // for(int i = 1; i <= n; i++) { // cout << a[i].x << " " << a[i].y << " " << a[i].h << endl; // } memset(dp, 0, sizeof dp); a[0].x = 0; a[0].y = 0; a[0].h = 0; dp[1] = a[1].h; for(int i = 2; i <= n; i++) { for(int j = 0; j < i; j++) { if(a[j].x < a[i].x && a[j].y < a[i].y) { dp[i] = max(dp[i], dp[j] + a[i].h); } } } long long ans = 0; for(int i = 1; i <= n; i++) ans = max(ans, dp[i]); printf("Case %d: maximum height = %lld\n", ++kase, ans); } return 0;}
阅读全文
0 0
- hdu 1069 Monkey and Banana (DP)
- hdu 1069 Monkey and Banana(dp)
- HDU-1069 Monkey and Banana (DP)
- Hdu 1069 Monkey and Banana -- DP
- HDU 1069 Monkey and Banana DP LIS
- HDU 1069 Monkey and Banana(DP)
- hdu 1069 Monkey and Banana(简单dp)
- HDU 1069 Monkey and Banana(dp)
- HDU 1069 Monkey and Banana DP
- Monkey and Banana - HDU 1069 dp
- hdu 1069 Monkey and Banana (dp)
- [HDU 1069]Monkey and Banana(DP)
- 【DP|LIS】HDU-1069 Monkey and Banana
- hdu 1069 Monkey and Banana dp
- HDU 1069 Monkey and Banana (dp)
- hdu 1069 Monkey and Banana(dp)
- HDU 1069Monkey and Banana Dp问题
- hdu 1069 Monkey and Banana(dp)
- Redis的安装
- @ModelAttribute注解的作用
- 基于梯度下降算法求解线性回归
- Android系统 boot.img 结构
- DataFrame如何根据一列来计算另一列出现的次数
- HDU-1069-Monkey and Banana-DP
- Redis基础
- 随机优惠券发放 金额越大 概率越小金额越小概率越大算法
- 挑战程序竞赛系列(12):2.5最小生成树
- unix://localhost:80: Permission denied 问题解决
- C语言实现单链表面试题--基础篇
- h5做app和原生app有什么区别?
- java反射1—获取class文件对象
- EXPDP&IMPDP搬移表空间-笔记