训练3 习题5
来源:互联网 发布:制作单片机最小系统 编辑:程序博客网 时间:2024/05/21 10:39
110 20 3026 8 105 5 571 1 12 2 23 3 34 4 45 5 56 6 67 7 7531 41 5926 53 5897 93 2384 62 6433 83 270
Case 1: maximum height = 40Case 2: maximum height = 21Case 3: maximum height = 28Case 4: maximum height = 342
思路:
保证上面的长宽都小于下面
1 。把输入的 直接转成3个不同砖块(相同也没事)
2. 先按长排序 如果相等按宽排序
3. 01背包问题的解法(在条件成立情况下)
代码如下:
#include<cstdio>
#include <algorithm>
using namespace std;
#define N 95
int f[N];
struct X
{
int x,y,z;
}block[N];
int max(int a, int b)
{ if(a>b) return a;
return b;
}
bool cmp1(X x1,X x2)
{
if(x1.x!=x2.x)
return x1.x<x2.x;
else
return x1.y<x2.y;
}
int main()
{
int T,n,a,b,c,i,j,temp,tallest;
T=1;
while(scanf("%d",&n)!=EOF&&n!=0){
for(i=0,j=0;j<n;j++){
scanf("%d%d%d",&a,&b,&c);
block[i].x=a; block[i].y=b; block[i].z=c;
block[i+1].x=a; block[i+1].y=c; block[i+1].z=b;
block[i+2].x=c; block[i+2].y=b; block[i+2].z=a;
i+=3;
}
for(i=0;i<n*3;i++){
if(block[i].x<block[i].y){
temp=block[i].x;
block[i].x=block[i].y;
block[i].y=temp;
}
}
sort(block,block+n*3,cmp1);
for(i=0,tallest=0;i<3*n;i++){
f[i]=block[i].z;
for(j=0;j<=i;j++){
if(block[i].x>block[j].x&&block[i].y>block[j].y){
f[i]=max(f[i],f[j]+block[i].z);
}
tallest=max(tallest,f[i]);
}
}
printf("Case %d: maximum height = %d\n",T++,tallest);
}
return 0;
}
- 训练3 习题5
- 训练3 习题3
- 训练3 习题6
- 训练3 习题10
- 训练3 习题13
- 训练3 习题15
- 训练3 习题1
- 训练3 习题14
- 训练3 习题16
- 训练3 习题11
- 训练3 习题7
- 训练3 习题12
- 训练3 习题18
- 训练3 习题22
- 训练3 习题24
- 逻辑思维训练习题
- mysql复习 习题训练
- 训练2 习题2
- makefile(二)变量
- spring从头开始(五)---spring web开发
- 【pandas】[1] Series 入门(创建和增删改查)
- JVM内存默认情况
- Java虚拟机1:什么是Java
- 训练3 习题5
- CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
- string的使用(初始化、比较、子串、转换、替换、删除、拼接等)
- 《剑指offer》:[2]O(1)时间删除链表结点
- 使用snmp4j实现get、set、trap
- qlineidet 只输入数字或者只输入IP
- 按键扫描处理总结
- unity 移动端 缩放 旋转
- java面向对象基础 -- 重写父类方法的规则