博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1069 [Monkey and Banana] 动态规划
阅读量:5141 次
发布时间:2019-06-13

本文共 1073 字,大约阅读时间需要 3 分钟。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069

题目大意:有n个长宽高不同的长方体要堆在一起。下面的长方体长宽严格小于上面的长方体,问最高能堆多高。长方体可翻转

关键思想:动态规划

代码如下:

//类似最长递减子列 #include 
#include
#include
#include
using namespace std;struct node{ int x,y,z;};vector
v;bool cmp(node a,node b){ return a.x>b.x;}int main(){ int n,ans,cnt=0; while(cin>>n,n){ int dp[200]; ans=0; v.resize(0); for(int i=0;i
>a>>b>>c; v.push_back({a,b,c}); v.push_back({a,c,b}); v.push_back({b,c,a}); v.push_back({b,a,c}); v.push_back({c,a,b}); v.push_back({c,b,a});//6种形态很关键,多了无用 } sort(v.begin(),v.end(),cmp); for(int i=0;i<6*n;i++){ int temp=0; for(int j=0;j
v[i].y&&v[j].x>v[i].x)||(v[j].y>v[i].x&&v[j].x>v[i].y))&&dp[j]>temp) temp=dp[j];//第j个可以放在第i个下面,temp为前j个可堆的最大高度 } dp[i]=temp+v[i].z; //加上第i个 } ans=0; for(int i=0;i<6*n;i++){ if(dp[i]>ans)ans=dp[i]; } printf("Case %d: maximum height = %d\n",++cnt,ans); } return 0;} /*110 20 3026 8 105 5 5*/

  

 

转载于:https://www.cnblogs.com/G-M-WuJieMatrix/p/6680289.html

你可能感兴趣的文章
每天CookBook之Python-004
查看>>
Android设置Gmail邮箱
查看>>
StringBuffer的用法
查看>>
js编写时间选择框
查看>>
PHP压缩文件操作
查看>>
Java数据结构和算法(四)--链表
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
由级别和性格特征将程序员分类 ---看看你属于哪一种
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>