Monkey and Banana 题解(动态规划)
Monkey and Banana 简单的动态规划
1.注:
本人第一篇博客,有啥不足还请多多包涵,有好的建议请指出。你以为有人读你博客,还给你提意见。
2.原题
Background:
A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clever enough, it shall be able to reach the banana by placing one block on the top another to build a tower and climb up to get its favorite food.
The researchers have n types of blocks, and an unlimited supply of blocks of each type. Each type-i block was a rectangular solid with linear dimensions (xi, yi, zi). A block could be reoriented so that any two of its three dimensions determined the dimensions of the base and the other dimension was the height.
They want to make sure that the tallest tower possible by stacking blocks can reach the roof. The problem is that, in building a tower, one block could only be placed on top of another block as long as the two base dimensions of the upper block were both strictly smaller than the corresponding base dimensions of the lower block because there has to be some space for the monkey to step on. This meant, for example, that blocks oriented to have equal-sized bases couldn't be stacked.
Your job is to write a program that determines the height of the tallest tower the monkey can build with a given set of blocks.
Input
The input file will contain one or more test cases. The first line of each test case contains an integer n,representing the number of different blocks in the following data set. The maximum value for n is 30.Each of the next n lines contains three integers representing the values xi, yi and zi.Input is terminated by a value of zero (0) for n.
Output
For each test case, print one line containing the case number (they are numbered sequentially starting from 1) and the height of the tallest possible tower in the format "Case case: maximum height = height".
Sample Input
1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0(为了好看,前面多了tab,复制时注意一下,第一次写博客,也不知影不影响复制)
Sample Output
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342
3.题目大意
猴子(为了还原背景。。。)有n种长方体(每种都没有数量限制),长宽高都给你,让你帮猴子计算他能搭多高
限制:下面的长方体的长和宽都要大于上面的,当然哪条边是长,哪条边是宽,哪条边是高你说了算。
4.分析题目
猴子很聪明,他们先把问题简单化,我们也试试:
如果长宽高是给定的,我怎么解决这个问题?
友好城市这题做过吗?没有的话就先去做一下。类似的,我们这一题也可以像友好城市那样做。
要求长宽都是递增的,那就先对长或宽进行排序,然后再找另一个的最长上升子序列(当然,这里每个的权值就不一定是1了),找完之后,答案不就出来了吗?
猴子表示想到这里就可以了,但是我们是人类,要展现人类的智慧:
我们要把长方体进行旋转。
咋旋转呢,我们这样想,a,b,c三个,别管怎么放置,每种放置只用一次(因为要求严格上升吗),那就瞬间好办了:
我把一个长方体变成6个!!!
那不会用重了吗?哦,兄弟,非常抱歉,请你再读一遍题。
于是问题迎刃而解。
5.别整没用的,上代码
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=*+;
int Dp[maxn];
struct K{
int x;
int y;
int h;
friend bool operator < (K a,K b){
return a.x<b.x;
}
}tin[maxn];//物品的结构体
int main(){
int n;
int jsjs=;
while(){//这样写大家习惯吗?
jsjs++;
scanf("%d",&n);
if(!n)
break;
memset(Dp,,sizeof(Dp));
for(int i=;i<=n;i++){
scanf("%d%d%d",&tin[i].x,&tin[i].y,&tin[i].h);
tin[i+n].x=tin[i].y;//这里可要想清楚,还有,可整个函数
tin[i+n].y=tin[i].x;
tin[i+n].h=tin[i].h;
tin[i+n*].x=tin[i].y;
tin[i+n*].y=tin[i].h;
tin[i+n*].h=tin[i].x;
tin[i+n*].x=tin[i].h;
tin[i+n*].y=tin[i].y;
tin[i+n*].h=tin[i].x;
tin[i+n*].x=tin[i].x;
tin[i+n*].y=tin[i].h;
tin[i+n*].h=tin[i].y;
tin[i+n*].x=tin[i].h;
tin[i+n*].y=tin[i].x;
tin[i+n*].h=tin[i].y;
}
sort(tin+,tin++*n);
int ans=;
for(int i=;i<=*n;i++){
Dp[i]=tin[i].h;
for(int j=;j<i;j++)//数据范围真的友好
if(tin[i].x>tin[j].x&&tin[i].y>tin[j].y)
Dp[i]=max(Dp[i],Dp[j]+tin[i].h);
ans=max(ans,Dp[i]);
}
printf("Case %d: maximum height = %d\n",jsjs,ans);
}
return ;
}
Monkey and Banana 题解(动态规划)的更多相关文章
- HDU 1069 Monkey and Banana(动态规划)
Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...
- HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 1069 Monkey and Banana 【动态规划】
题目 题意:研究人员要测试猴子的IQ,将香蕉挂到一定高度,给猴子一些不同大小的箱子,箱子数量不限,让猩猩通过叠长方体来够到香蕉. 现在给你N种长方体, 要求:位于上面的长方体的长和宽 要小于 下面 ...
- 随手练——ZOJ 1093 Monkey and Banana(动态规划)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93 一堆科学家研究猩猩的智商,给他M种长方体,每种N个. 然后,将一个 ...
- HDU 1069 Monkey and Banana (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 简单记录一下 思路:把长方体的各种摆法都存到数组里面,然后按照长宽排序,再dp即可 转移方程 d ...
- HDU 1069 Monkey and Banana dp 题解
HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...
- HDU——Monkey and Banana 动态规划
Monkey and Banana Time Limit:2000 ...
- Monkey and Banana(HDU 1069 动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
随机推荐
- 转载:windows下安装mac虚拟机(Vmvare+mac)
体验Mac的高效与思想,每个技术人都应该去了解和体验,本文转载自网络,使用Vmvare,虚拟Mac系统 https://blog.csdn.net/qq_31867709/article/detail ...
- FTP服务器上传工具,FTP服务器上传工具下载!
IIS7服务器管理工具能够作为FTP的客户端,进行FTP的命令操作,可在客户端,下载,安装FTP软件! 同时,它也可以作为VNC的客户端,进行VNC的命令操作!它能够批量连接Windows和Linux ...
- 汇编指令:push、pop
8086CPU出栈入栈都是以字为单位进行的. push ax 由一下两步完成 1.SP=SP-2 2.将ax中的内容送入SS:SP指向的内存单元 pop ax 1.将SS:SP指向的内存单元中的内容送 ...
- 09_EM算法
今天是2020年3月5日星期四.预计开学时间不会早于四月初,真是好消息,可以有大把的时间整理知识点(实际上发文章的时间都6月6号了,希望9月份能开学啊,不耽误找工作~).每次导师找,整个人会变的特别烦 ...
- 03-Python基础2
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- Markdown入门学习202004
Markdown入门学习202004 推荐使用Typora这款轻量级markdown编辑软件 标题 # 一级标题(井号后面有空格) ## 二级标题 ### 三级标题 ...... ###### 最多到 ...
- Vue-websocket使用
Vue中使用websocket 1.介绍:websocket是一个双向通行工具,解决了原来的http单向通信的弊端,可以让服务器主动向客户端推送数据 // 安装客户端的socket npm i soc ...
- vue踩过的坑('url' is assigned a value but never used no-unused-vars)
1.代码编写 2.遇见错误 3.解决方案 在错误代码后加入注释:(// eslint-disable-line no-unused-vars) 之后页面上就不会出现该错误信息了
- Python 中class的小例子
class Song(): def __init__(self,lyrics): self.lyrics=lyrics def sing_a_song(self): for line in self. ...
- 0.大话Spring Cloud
天天说Spring cloud ,那到底它是什么? 定义 它不是云计算解决方案 它是一种微服务开发框架 它是(快速构建分布式系统的通用模式的)工具集 它基于Spring boot 构建开发 它是云原生 ...