uva 437 动态规划 lrj
来源:互联网 发布:杨博网络主播 编辑:程序博客网 时间:2024/06/03 20:42
题意:
给出不超过30个立方体,每一种有无穷多个。
要求这些立方体堆成一个尽量搞的柱子,使得每一个立方体下面的立方体的底面长宽都大于上面的底面长宽
题解:
很明显我们可以将每个立方体当做3个或者6个不一样的不可以旋转的长方体
下面代码当做6个,是为了方便计算,这样在判断的过程中不需要加太多条件
而且数据量不大,可以这样做
dp思想:
01背包的思想,放与不放,最后求一个最大值就行了
不能直接取dp【m-1】,因为我们不知道最后一个立方体用了还是没有用
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{ int x,y,z; node(){} node(int x_,int y_,int z_){x=x_,y=y_,z=z_;}}blocks[200];int dp[200];bool cmp(node x1,node x2){ return x1.x*x1.y<x2.x*x2.y;}int main(){ int cases=1,n,a,b,c; //freopen("in.txt","r",stdin); while(scanf("%d",&n),n) { int m=0; for(int i=1;i<=n;i++){ scanf("%d%d%d",&a,&b,&c); blocks[m++]=node(a,b,c); blocks[m++]=node(b,a,c); blocks[m++]=node(c,b,a); blocks[m++]=node(b,c,a); blocks[m++]=node(a,c,b); blocks[m++]=node(c,a,b); } sort(blocks,blocks+m,cmp); int ans=0; for(int i=0;i<m;i++){ dp[i]=blocks[i].z; for(int j=0;j<i;j++){ if(blocks[i].x>blocks[j].x&&blocks[i].y>blocks[j].y) dp[i]=max(dp[i],dp[j]+blocks[i].z); } ans=max(ans,dp[i]); } printf("Case %d: maximum height = %d\n",cases++,ans); } return 0;}
阅读全文
0 0
- uva 437 动态规划 lrj
- uva 1347 动态规划DAG lrj-P269
- uva 11400 lrj-P275 动态规划
- uva 116 动态规划 多阶段决策问题 路径记录 lrj-P270
- uva 11584 计算最少回文串数 动态规划 lrj-P276
- uva 10285 lrj-P304 从简单DAG动态规划得到的感悟
- 动态规划初步1(LRJ紫书)
- uva 437 动态规划
- uva 437 DAG上的动态规划
- 动态规划-uva-674
- UVA 1619 动态规划
- 动态规划 uva 1025
- uva 11584 动态规划
- uva 10003 动态规划
- 动态规划UVA 580
- 动态规划intermediate:UVa 11456
- 动态规划intermediate:UVa 10239
- 动态规划intermediate:UVa 10604
- SPOJ
- opencv15-cvCreateCameraCapture使用出现灰屏
- 2242 The Circumference of the Circle
- 性能指标(模型评估)之mAP
- Learning DevOps: Continuously Deliver Better Software.pdf
- uva 437 动态规划 lrj
- 第10章, 早期(编译期)优化
- iOS开发-UIImageView响应点击事件
- Aix之 xmanager 2.0连接AIX服务器
- php中使用apcu实现共享数据
- Linux压缩与解压缩命令
- Maven项目中WEB模块中后台代码打成jar包
- javascript判断页面访问类型进行跳转
- htmlcss注册页面的一些小例子