【多重背包】 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种面 ...
随机推荐
- HDU 1241Oil Deposits (DFS)
Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground ...
- hdu_5788_Level Up(树状数组+主席树)
题目链接:hdu_5788_Level Up 题意: 有一棵树,n个节点,每个节点有个能力值A[i],mid[i],mid的值为第i节点的子树的中位数(包括本身),现在让你将其中的一个节点的A值改为1 ...
- json_encode转成带 花括号的{ } 和 中括号的[ ] 2种 形式 json数据
//提交多个出差人员 .命名为数组 name="apply_members[] " //php接收到数据 为 数组 $aa = array('0'=>11,'1'=> ...
- 2.Math对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Python创建多进程,用Queue传递信息
创建10个进程,分别计算0到1000各个区间的和,主进程汇总 __author__ = 'Administrator' # -*- coding:utf-8 -*- ''' @author:qiush ...
- servlet规范核心类图
作为新手在写servlet时很多时候忘记类与类之间的关系,找到这张图就瞬间清晰了,这比看API要舒服很多.
- 【Machine Learning in Action --3】决策树ID3算法
1.简单概念描述 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定 ...
- CentOS安装配置JDK-7(.rpm)
声明:本文转自:http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html 安装说明 系统环境:centos-6.3安装方式:rpm安装 ...
- Oracle 正则 一行转多行
, LEVEL, 'i') AS STR,bjdm FROM valueWeekInfo CONNECT ; 可以将 bjdm 换成 '01,02,03,04' , valueWeekInfo 换成d ...
- perl Socket接收超时设置
一般来说, IO::Socket::INET里的Timeout设置是对于conncet的 如果你想设置recv接收超时, 可以这样设置: usr Socket: ...... , )); #注意这里p ...