当前位置:网站首页>HDU - 1069 Monkey and Banana(DP+LIS)
HDU - 1069 Monkey and Banana(DP+LIS)
2022-07-01 05:28:00 【WA_ automata】
Monkey and Banana
Problem Description
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
Sample Output
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342
The question : Given n Kind of The three-dimensional length of the box , There are an infinite number of each , Make you a tower , The length and width of the lower part of two adjacent cuboids are strictly greater than the length and width of the upper part , Find the highest stackable height ;
analysis : Each cuboid can be placed in six ways , We sort all the placement methods of all the cuboids from small to large by length and width , set up dp[i] It means the... After sorting i A box is the highest height that can be stacked at the bottom , Then go ahead and find an update that is smaller than its length, width and strictness , namely :
d p [ i ] = m a x ( ∑ j = 0 i − 1 d p [ j ] + k [ i ] . h ) dp[i]=max(\sum_{j=0}^{i-1}dp[j]+k[i].h) dp[i]=max(j=0∑i−1dp[j]+k[i].h)
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<array>
using namespace std;
int main()
{
int n,T=1;
while(cin>>n,n)
{
vector<array<int,3> > k;
for(int i=1;i<=n;i++)
{
int a,b,c;cin>>a>>b>>c;
k.push_back({
a,b,c});
k.push_back({
a,c,b});
k.push_back({
b,a,c});
k.push_back({
b,c,a});
k.push_back({
c,a,b});
k.push_back({
c,b,a});
}
sort(k.begin(),k.end());
vector<int> dp(6*n);
for(int i=0;i<6*n;i++)
{
dp[i]=k[i][2];
for(int j=0;j<i;j++)
if(k[i][0]>k[j][0] && k[i][1]>k[j][1])
dp[i]=max(dp[i],dp[j]+k[i][2]);
}
int ans=0;
for(int i=0;i<6*n;i++) ans=max(ans,dp[i]);
cout<<"Case "<<T++<<": maximum height = "<<ans<<endl;
}
return 0;
}
边栏推荐
- Printk debugging summary
- Global and Chinese market of solder wire 2022-2028: Research Report on technology, participants, trends, market size and share
- Use and principle of reentrantlock
- 数字金额加逗号;js给数字加三位一逗号间隔的两种方法;js数据格式化
- Set set detailed explanation
- Global and Chinese market of search engine optimization (SEO) software 2022-2028: Research Report on technology, participants, trends, market size and share
- Global and Chinese markets of Ethernet communication modules 2022-2028: Research Report on technology, participants, trends, market size and share
- Memtable for leveldb source code analysis
- 实战:redux的基本使用
- 液压滑环的特点讲解
猜你喜欢

导电滑环短路的原因以及应对措施

Use and principle of Park unpark

el-cascader回显失败;el-cascader回显不出来

And search: the suspects (find the number of people related to the nth person)

TypeORM 框架

Actual combat: basic use of Redux

Set集合详细讲解

Ebpf cilium practice (2) - underlying network observability

Things generated by busybox

Vmware workstation network card settings and three common network modes
随机推荐
Tar command
Introduction to 3D modeling and processing software Liu Ligang University of science and technology of China
[RootersCTF2019]babyWeb
Variable binding and deconstruction for rudimentary rust
第05天-文件操作函数
Printk debugging summary
Thread process foundation of JUC
HDU - 1024 Max Sum Plus Plus(DP)
Rust hello-word
Use and principle of reentrantlock
多表操作-外键级联操作
Global and Chinese markets of InGaAs APD arrays 2022-2028: Research Report on technology, participants, trends, market size and share
HCIP Day13
[SRS] use of Vhost isolated stream: push / pull Stream Address
[NLP Li Hongyi] notes
Redis数据库的部署及常用命令
Dynamic verification of new form items in El form; El form verifies that the dynamic form V-IF does not take effect;
More than one file was found with OS independent path ‘lib/armeabi-v7a/libyuv. so‘.
移动端常用解决方案
What can the points mall Games bring to businesses? How to build a points mall?