【多重背包】 poj 2392
转自:http://blog.csdn.net/wangjian8006
题目大意:有一头奶牛要上太空,他有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个
将这些石头叠加起来,问能够达到的最高高度。
解题思路:首先对数据进行升序排序,这样才是一个标准的多重背包的问题
为什么要排序?
因为只有这样才能得到最优解,如果一开始就是高的在前面,那么后面有低的却不能选到,就直接选高的去了。这样是不能达到最优解的
使f[i]的状态标记,是否可以达到这个高度
这样能够达到取f[i]中i的最大值即可
#include <iostream>
#include <algorithm>
#include <memory.h>
#include <cstdio>
using namespace std;
#define MAXV 410
#define MAXM 40010
typedef struct {
int h,a,c;
}Blocks;
Blocks v[MAXV];
int cmp(Blocks x,Blocks y){
return x.a<y.a;
}
int f[MAXM],user[MAXM];
int main()
{
// freopen("in.txt","r",stdin);
int i,t,j,max;
while(~scanf("%d",&t)){
for(i=;i<=t;i++){
scanf("%d%d%d",&v[i].h,&v[i].a,&v[i].c);
}
sort(v+,v+t+,cmp);
memset(f,,sizeof(f));
f[]=;
max=; //赋值为0,不能为-1
for(i=;i<=t;i++){
memset(user,,sizeof(user));
for (j=v[i].h;j<=v[i].a;j++){
if(!f[j] && f[j-v[i].h] && user[j-v[i].h]+<=v[i].c){
//假如第J个高度没有遍历过,且第j-v[i].h个高度被遍历,且数量没有到达极限
f[j]=;
user[j]=user[j-v[i].h]+;
if(j>max) max=j;
}
}
}
printf("%d\n",max);
}
return ;
}
【多重背包】 poj 2392的更多相关文章
- POJ 2392 Space Elevator(贪心+多重背包)
POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...
- poj 2392 多重背包
题意:有几个砖,给出高度,能放的最大高度和数目,求这些砖能垒成的最大高度 依据lim排个序,按一层一层进行背包 #include<cstdio> #include<iostream& ...
- POJ 2392 Space Elevator(多重背包)
显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...
- POJ 2392【多重背包】
题意: k个块,给出每个块的高度hi,数量ci,不能超过的高度: 求这些块可以组成的最大高度一个. 思路: 大致可看这个题是一个背包,背包的承重是高度. 对于每个物品,有他的价值是高度,还有限定的数量 ...
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
- (多重背包+记录路径)Charlie's Change (poj 1787)
http://poj.org/problem?id=1787 描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...
- poj 1742 Coins (多重背包)
http://poj.org/problem?id=1742 n个硬币,面值分别是A1...An,对应的数量分别是C1....Cn.用这些硬币组合起来能得到多少种面值不超过m的方案. 多重背包,不过这 ...
- POJ 1014 Dividing(多重背包+二进制优化)
http://poj.org/problem?id=1014 题意:6个物品,每个物品都有其价值和数量,判断是否能价值平分. 思路: 多重背包.利用二进制来转化成0-1背包求解. #include&l ...
- 【转载】poj 1276 Cash Machine 【凑钱数的问题】【枚举思路 或者 多重背包解决】
转载地址:http://m.blog.csdn.net/blog/u010489766/9229011 题目链接:http://poj.org/problem?id=1276 题意:机器里面共有n种面 ...
随机推荐
- apt-get dpkg lock 和 debconf 问题
一: 在用sudo apt-get install 安装软件时,由于速度太慢,想换个软件源,直接关闭了终端,apt-get但进程没有结束,结果终端提示 E: Could not get lock /v ...
- 14.hibernate的反向生成实现全套增删改查
图片顺序就是步骤顺序 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
- Python创建多进程,用Queue传递信息
创建10个进程,分别计算0到1000各个区间的和,主进程汇总 __author__ = 'Administrator' # -*- coding:utf-8 -*- ''' @author:qiush ...
- MySQL(2)-数据类型和Schema
一.数据类型 只介绍基本的数据类型. MySQL中选择合适的数据类型还是很有必要的,下面是一些通用原则: 小的就是好的 一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快, ...
- Excel教程(10) - 逻辑运算符
AND 用途:所有参数的逻辑值为真时返回 TRUE(真):只要有 一个参数的逻辑值为假,则返回 FALSE(假). 语法:AND(logical1,logical2, ). 参数:Logical1, ...
- @+android:id的一些记录
在修改Settings模块的APN列表时,遇到了类似标题中的一些写法. 在网上查了一下: 加上android:表示引用android.R.id里面定义的id资源,如果android.R.id里面确实有 ...
- Prime Path(BFS)
Prime Path Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total S ...
- NYOJ-1036 非洲小孩(贪心)
非洲小孩 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗 ...
- Android PagerAdapter的用法
转http://blog.csdn.net/look85/article/details/8563906 在写这个之前,真心需要吐槽一下…关于Android开发中,PageAdapter的用法在网上能 ...
- Flask -- 静态文件 和 模板渲染
静态文件 一般用于存放图片,样式文件(css, js等) 保存位置:包中或者文件所在目录创建一个 static 目录 访问:在应用中使用 /static/...即可访问 , 更好的方式是使用url_f ...