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 ...
随机推荐
- java多线程机制1(线程创建的两种方式)
进程:正在运行的程序.(即程序在内存中开辟了一片空间) 线程:是进程的执行单元. 一个进程至少包含了一个多个线程. 多线程是不是可以提高效率:多线程可以合理的利用系统的资源,提高效率是相对的.因为cp ...
- 【BZOJ】1297: [SCOI2009]迷路
[题意]给定n个点的有向带边权图,求0到n-1长度恰好为T的路径数.n<=10,T<=10^9,边权1<=wi<=9. [算法]矩阵快速幂 [题解]这道题的边权全部为1时,有简 ...
- TCP 传输控制协议(转)
开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...
- 修改 firefox accesskey 的快捷键
Chrome中,如果设置了 accesskey 的话,可以通过 Alt + 快捷键 来之直接跳转的.但在Firefox 中,可能是为了防止于菜单的快捷键冲突,所以设置了 Shift + Alt + 快 ...
- Java Eclipse 配置
1.清除多余记录 最近用eclipse打包jar的时候,需要指定一个main函数.需要先运行一下main函数,eclipse的Runnable JAR File Specification 下的Lau ...
- BootStarp的form表单的基本写法
代码如下: <!DOCTYPE html> <html> <head> <title>BootStrap的基础入门</title> < ...
- 解决IDEA导入Myclipse项目的时候没有识别为Web项目的问题
IDEA在导入一个MyEclipse新建的Web项目的时候,一般会正确检测这个项目是什么项目.不过有时候会出现各种问题. 1. 出现一些Jar包不存在的问题,一般是servlet-api这样的包不存在 ...
- Appium+python 一个简单的登录测试实例
# coding=utf-8 from appium import webdriver import time import unittest import os import HTMLTestRun ...
- EF – 8.多对多关联
5.6.10 <多对多关联(上)> 时长:9分57秒 难度:难 5.6.11<多对多关联(下)> 时长:8分50秒 难度:难 如果单独地把多对多关联的CRUD拿出来讲,确实比较 ...
- 想弄一弄tensorflow,先弄numpy
现在晚上凉快点了, 下班回家可以学会东东了.. 这次的书是一个印度人写的. 按着示例代码弄起先.. #!/usr/bin/env python # -*- coding: utf-8 -*- impo ...