HDU 1069 Monkey and Banana(二维偏序LIS的应用)
---恢复内容开始---
Monkey and Banana
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13003 Accepted Submission(s): 6843
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.
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.
97 93
84 62
33 83 27
题目链接:HDU 1069
题意:给出n种块的尺寸,用坐标x、y、z表示,当某一个块的两个比下面的块中某个两个坐标小的时候就可以把这个块叠上去,可以把块旋转一下使得三个坐标互相转变……
块的数量是无限的其实是吓唬人的,由于是要严格上升,显然三个已经把所有情况考虑了,四个肯定会跟某一种重复,然后每一个块都假设有三个,用O(n2)的方法求一种可以说是带权LIS的东西就行了
代码:
- #include <stdio.h>
- #include <bits/stdc++.h>
- using namespace std;
- #define INF 0x3f3f3f3f
- #define CLR(arr,val) memset(arr,val,sizeof(arr))
- #define LC(x) (x<<1)
- #define RC(x) ((x<<1)+1)
- #define MID(x,y) ((x+y)>>1)
- typedef pair<int,int> pii;
- typedef long long LL;
- const double PI=acos(-1.0);
- const int N=190;
- struct info
- {
- int x;
- int y;
- int z;
- bool operator<(const info &t)const
- {
- if(x!=t.x)
- return x<t.x;
- return y<t.y;
- }
- info(int xx,int yy,int zz):x(xx),y(yy),z(zz){}
- info(){}
- };
- vector<info>arr;
- int dp[N];
- int main(void)
- {
- int n,i,j,x,y,z;
- int q=1;
- while (~scanf("%d",&n)&&n)
- {
- CLR(dp,0);
- arr.clear();
- for (i=0; i<n; ++i)
- {
- scanf("%d%d%d",&x,&y,&z);
- arr.push_back(info(x,y,z));
- arr.push_back(info(x,z,y));
- arr.push_back(info(y,x,z));
- arr.push_back(info(y,z,x));
- arr.push_back(info(z,x,y));
- arr.push_back(info(z,y,x));
- }
- sort(arr.begin(),arr.end());
- int SZ=arr.size();
- for (i=0; i<SZ; ++i)
- {
- int pre_max=0;
- for (j=0; j<i; ++j)
- {
- if(arr[j].x<arr[i].x&&arr[j].y<arr[i].y&&dp[j]>pre_max)
- pre_max=dp[j];
- }
- dp[i]=pre_max+arr[i].z;
- }
- printf("Case %d: maximum height = %d\n",q++,*max_element(dp,dp+SZ));//n^2算法这里就要取max,之前搞混了直接输出最后一个导致WA
- }
- return 0;
- }
HDU 1069 Monkey and Banana(二维偏序LIS的应用)的更多相关文章
- HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...
- 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 ...
- HDU 1069 Monkey and Banana dp 题解
HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...
- HDU 1069 Monkey and Banana (DP)
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 1069—— Monkey and Banana——————【dp】
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 1069 Monkey and Banana 基础DP
题目链接:Monkey and Banana 大意:给出n种箱子的长宽高.每种不限个数.可以堆叠.询问可以达到的最高高度是多少. 要求两个箱子堆叠的时候叠加的面.上面的面的两维长度都严格小于下面的. ...
- 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(动态规划)
Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...
- HDU 1069 Monkey and Banana(DP 长方体堆放问题)
Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...
随机推荐
- dt.jar设计时rt.jar运行时
很多人在初学Java的时候,都要配置环境变量.在配置CLASSPATH的时候,都会加上一个当前目录.,还有两个jar:dt.jar和tools.jar.其实好多人都不了解这两个jar的作用,尤其是dt ...
- 有时间测试dism
dism /capture-image /imagefile:d\win.win /capturedir:c:\ /name:win81 dism /export-image /winboot /so ...
- sublime 实用 快捷键
alt+- 向后导航 alt+shift+- 向前导航 ctrl+shift+↑↓ 上下移动一行 ctrl+k,ctrl+u 转换所选为大写 ctrl+k,ctrl+l(字母L) 转换所选为小写 ct ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--函数
1.什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; alert(s ...
- JS 中的foreach和For in比较
使用方式举例如下: <script type="text/javascript"> var jsonranklist=[{"name":" ...
- Sonar相关资料
Sonar介绍及安装:http://www.cnblogs.com/suncoolcat/p/3323200.html Sonar安装: http://www.myexception.cn/open- ...
- 【vijos1066】弱弱的战壕 线段树
描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒 ...
- subList和asList
subList subList返回仅仅只是一个视图.直接上源码 public List<E> subList(int fromIndex, int toIndex) { subListRa ...
- Python实践:模块自动重载
一.概述 二.思路 三.实现 四.测试 1.开启自动重载(终端1) 2.修改模块(终端2) 3.查看实时输出(终端1) 五.参考源码 一.概述 开发Web程序时,通常会采用本地服务器进行调试,但如果代 ...
- HTTP基础04--web服务器
单台虚拟主机实现多个域名 由于虚拟服务器的功能,一台HTTP服务器可以搭建多个Web站点: 在互联网上,域名通过 DNS 服务映射到 IP 地址(域名解析)之后访问目标网站.当请求发送到服务器时,已经 ...