hdu 1069 动规 Monkey and Banana
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Description
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
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
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
Sample Output
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct s
{
int l,w,h;
} a[111];
int dp[111];
int cmp(s A,s B)
{
if(A.l==B.l)
return A.w>B.w;
return A.l>B.l;
}
int main()
{
int d[3],n,i,j,cot=1,k,sum;
while(scanf("%d",&n)!=EOF&&n)
{
k=0;
for(i=0; i<n; i++)
{
scanf("%d%d%d",&d[0],&d[1],&d[2]);
sort(d,d+3);
//将数据转换成多种形式的矩形体
a[k].l=d[2];
a[k].w=d[1];
a[k].h=d[0];
k++;
a[k].l=d[2];
a[k].w=d[0];
a[k].h=d[1];
k++;
a[k].l=d[1];
a[k].w=d[0];
a[k].h=d[2];
k++;
}
sort(a,a+k,cmp);
for(i=0; i<k; i++) dp[i]=a[i].h;
for(i=k-2; i>=0; i--)
for(j=i+1; j<k; j++)
{
if(a[i].l>a[j].l&&a[i].w>a[j].w)//最大递减dp
if(dp[i]<dp[j]+a[i].h)
dp[i]=dp[j]+a[i].h;
}
sum=dp[0];
for(i=0; i<k; i++)
if(sum<dp[i]) sum=dp[i];
printf("Case %d: maximum height = %d\n",cot++,sum);
}
return 0;
}
矩形嵌套
- 描述
- 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。
- 输入
- 第一行是一个正正数N(0<N<10),表示测试数据组数,
每组测试数据的第一行是一个正正数n,表示该组测试数据中含有矩形的个数(n<=1000)
随后的n行,每行有两个数a,b(0<a,b<100),表示矩形的长和宽 - 输出
- 每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行
- 样例输入
-
1
10
1 2
2 4
5 8
6 10
7 9
3 1
5 8
12 10
9 7
2 2 - 样例输出
-
5
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std; int t,n; struct node
{
int l,w;
} a[1001];
int dp[1001];
int cmp(node A,node B)
{
if(A.l==B.l)
return A.w<B.w;
return A.l<B.l;
} int main()
{
int d[3];
scanf("%d",&t);
while(t--)
{
int i,j,k=0,ct=0;
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d %d",&d[0],&d[1]);
sort(d,d+2);
a[k].l=d[1];
a[k].w=d[0];
k++;
a[k].l=d[0];
a[k].w=d[1];
k++;
}
sort(a,a+k,cmp);
for(i=0; i<k; i++)
{
dp[i]=1;
for(j=0; j<i; j++)
{
if(a[i].l>a[j].l&&a[i].w>a[j].w)
{
dp[i]=max(dp[i],dp[j]+1);
}
}
}
int maxx=dp[0];
for(i=0; i<k; i++)
{
if(dp[i]>maxx)
maxx=dp[i];
}
printf("%d\n",maxx);
}
return 0;
}
hdu 1069 动规 Monkey and Banana的更多相关文章
- HDU 1069 Monkey and Banana(二维偏序LIS的应用)
---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- 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 / ZOJ 1093 Monkey and Banana (最长路径)
HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...
- (最大上升子序列)Monkey and Banana -- hdu -- 1069
http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit:1000MS Memory L ...
- 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——————【dp】
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 1069 Monkey and Banana dp 题解
HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...
- 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 ...
随机推荐
- C/C++程序员必备的15个编辑器和集成开发环境
我们有许多的编程语言,像 Java,NET,PHP,Ruby,Perl 和 Python 等,但今天我们要讨论的是两个最古老和流行的语言的C和C++.它们都有其特殊的地方,更有效的功能和支持的工具,这 ...
- 说说asp.net中的异常处理和日志追踪
关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common ...
- JavaScript设置粘贴板
设置复制 document.body.oncopy = function(){ alert('不许复制'); return false; }; 设置粘贴 document.getElementById ...
- 2017ACM暑期多校联合训练 - Team 2 1008 HDU 6052 To my boyfriend (数学 模拟)
题目链接 Problem Description Dear Liao I never forget the moment I met with you. You carefully asked me: ...
- 1、编写第一个java程序--Hello—World
1.下载JDK8.0文件 下载网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...
- 爬虫--selenium
什么是selenium? 基本使用 from selenium import webdriver from selenium.webdriver.common.by import By from se ...
- JWT 拓展
JWT适用场景 https://www.jianshu.com/p/af8360b83a9f 适用于一次性操作的认证,颁布一个很短过期时间的JWT给浏览器. 无状态的JWT无法实现精确的在线人数统计. ...
- 二进制、十进制、十六进制(python)
int(“x”,base=2/8/16)是把x都转换成十进制 二进制: 1111=1*2的3次方+1*2的2次方+1*2的1次方+1*2的0次方 =8+4+2+1=15 1000=1*2的3次方+0 ...
- php菜刀分析学习
这里以eval为例 我们知道, php中的eval能把字符串当代码执行: eval('phpcode'); 注意, 这里的代码要有分号结尾, 我们测试: 我们创建一个最简单的SHELL: <?p ...
- Keras自定义评估函数
1. 比较一般的自定义函数: 需要注意的是,不能像sklearn那样直接定义,因为这里的y_true和y_pred是张量,不是numpy数组.示例如下: from keras import backe ...