随手练——ZOJ 1093 Monkey and Banana(动态规划)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93
一堆科学家研究猩猩的智商,给他M种长方体,每种N个。
然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉。
现在给你M种长方体,计算,最高能堆多高。
要求位于上面的长方体的长要大于(注意不是大于等于)下面长方体的长,上面长方体的宽大于下面长方体的宽。
解题:
1、一个长方体,可以有6种不同的摆法。长宽排序,就可以只存下来三种,需要的是高的唯一性。
2、将所有长方体按底面积升序排序。
3、第 i 个长方体的最大值 = 前i个(0到i - 1)长方体所能构成的最大高度 + 自己的高度。(升序是为了保证前 i 个长方体底面积一定≤第 i 个,是有可能摆在第i个上面的。)
转移方程:
4、遍历一遍dp数组,得到最大值。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
class block {
public:
int length, width, height;
block() {};
block(int x, int y, int z) {
length = x; width = y; height = z;
}
//按底面积大小升序排序
bool operator <(block b) const {
return length * width < b.width* b.length;
}
}cube[];
];
bool check(block under, block upper) {
if (under.length > upper.length && under.width > upper.width) return true;
return false;
}
int main() {
;
while (cin >> n) {
)break;
; i < n; i++) {
int l, w, h;
scanf("%d%d%d", &l, &w, &h);
//长方体的height,length,width分别作高
cube[i * + ] = block(l > w ? l : w, l > w ? w : l, h);
cube[i * + ] = block(w > h ? w : h, w > h ? h : w, l);
cube[i * + ] = block(h > l ? h : l, l > h ? h : l, w);
}
sort(cube, cube + n * );
dp[] = cube[].height;
; i < n * ; i++) {
;
; j < i; j++) {
if (cube[i].length > cube[j].length && cube[i].width > cube[j].width) {
temp = dp[j] > temp ? dp[j] : temp;//找前i个长方体的最大值
}
}
dp[i] = cube[i].height + temp;
}
;
; i < n * ; i++) {
max = dp[i] > max ? dp[i] : max;
}
cout << "Case " << k++ << ": maximum height = " << max << endl;
}
;
}
随手练——ZOJ 1093 Monkey and Banana(动态规划)的更多相关文章
- HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)
HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- HDU——Monkey and Banana 动态规划
Monkey and Banana Time Limit:2000 ...
- Monkey and Banana 题解(动态规划)
Monkey and Banana 简单的动态规划 1.注: 本人第一篇博客,有啥不足还请多多包涵,有好的建议请指出.你以为有人读你博客,还给你提意见. 2.原题 Background: A grou ...
- HDU 1069 Monkey and Banana(动态规划)
Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...
- Monkey and Banana(HDU 1069 动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu1069Monkey and Banana(动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1069 Monkey and Banana dp 题解
HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...
随机推荐
- Sql动态查询拼接字符串的优化
Sql动态查询拼接字符串的优化 最原始的 直接写:string sql="select * from TestTables where 1=1";... 这样的代码效率很低的,这样 ...
- java的锁机制——synchronized
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个线 ...
- MongoDB的web可视化管理工具
现在许多应用都使用MongoDB存储大量的业务数据,MongoDB基于文档式的存储,在大数据行业的应用还是很普遍的.MongoDB的客户端工具也很多,基于web的却不多,国产的就更少了,下面介绍的是一 ...
- mysql小试题3
查询结果:
- js-ES6学习笔记-编程风格(1)
1.ES6提出了两个新的声明变量的命令:let和const.其中,let完全可以取代var,因为两者语义相同,而且let没有副作用. 2.var命令存在变量提升效用,let命令没有这个问题.建议不再使 ...
- 【代码笔记】iOS-自定义loading
一,效果图. 二,工程图. 三, 代码. ViewController.h #import <UIKit/UIKit.h> //loading #import "GPLoadin ...
- (1)H5实现音乐播放器【正在播放-歌词篇】
近期闲来无事,就想着复习一下前端的东西,然后正好跟朋友搞了一个公共开放的音乐api接口,就想着写一个音乐播放器玩玩! 话不多说,直接上图,然后上代码 [播放器显示正在播放] 实现功能: 1:歌词随着歌 ...
- windows下安装composer方法
composer是一个新崛起的PHP的依赖管理工具.官方安装方法见: 此处假定: (1)php安装目录为C:/php5.4 (2)php 安装目录已经加入PATH环境变量(这样就可以在命令行直接输入“ ...
- [性能调优]如何通过读PeopleSoft Trace文件来调优
理解PeopleSoft Trace文件对于解决性能问题是绝对有必要的.你可能面临一个问题,用户抱怨性能较慢,而OEM并没有补货SQL,你有2种方法选择:使用PeopleSoft trace检查或启用 ...
- Android应用程序进程启动过程(前篇)
在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,而不是应 ...