WikiOI 3269 混合背包 (动规+多重背包优化)
3269 混合背包
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 钻石 Diamond
题解
查看运行结果
题目描述 Description
背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少?
输入描述 Input Description
第一行两个数N,V,下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi=1表示至多取一件,Mi>1表示至多取Mi件,Mi=-1表示数量无限
输出描述 Output Description
1个数Ans表示所装物品价值的最大值
样例输入 Sample Input
2 10
3 7 2
2 4 -1
样例输出 Sample Output
22
数据范围及提示 Data Size & Hint
对于100%的数据,V <= 200000 , N <= 200
题目很简单,但是数据很恐怖,第一次打妥妥的全tle,01背包和完全背包可以按照老方法写,多重背包用了一点点小优化(我也搞不太明白,但是背下来就好)。
24到39行
是最重要最有价值的部分!!!
program mys;
var i,j,k,m,n,kk:longint;
v,w,t:array[0..500]of longint;
f:array[0..500000]of int64;begin
readln(n,m);
for i:=1 to n do
begin
readln(v[i],w[i],t[i]);
if t[i]=1 then
begin
for j:=m downto v[i] do
if f[j-v[i]]+w[i]>f[j] then
f[j]:=f[j-v[i]]+w[i];
end;
if t[i]=-1 then
begin
for j:=v[i] to m do
if f[j-v[i]]+w[i]>f[j] then
f[j]:=f[j-v[i]]+w[i];
end;
if t[i]>1 then //最重要的部分!!!
begin
kk:=1;
while kk<=t[i] do
begin
for j:=m downto kk*v[i] do
if f[j-kk*v[i]]+kk*w[i]>f[j] then
f[j]:=f[j-kk*v[i]]+kk*w[i];
t[i]:=t[i]-kk;
kk:=kk*2;
end;
if t[i]>0 then
for j:=m downto t[i]*v[i] do
if f[j-t[i]*v[i]]+t[i]*w[i]>f[j] then
f[j]:=f[j-t[i]*v[i]]+t[i]*w[i];
end;
end;
writeln(f[m]);
end.
WikiOI 3269 混合背包 (动规+多重背包优化)相关推荐
- 背包问题-【01背包】【完全背包】【多重背包】【多限定条件背包】
背包问题 给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高. 可参考https://www.cnblogs.com/-guz/p/9866118.h ...
- 小明打联盟 牛客(背包dp,多重背包)
链接:https://ac.nowcoder.com/acm/problem/14553 来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放 ...
- 01背包模板、全然背包 and 多重背包(模板)
转载请注明出处:http://blog.csdn.net/u012860063 贴一个自觉得解说不错的链接:http://www.cppblog.com/tanky-woo/archive/2010/ ...
- 【qduoj - 142】 多重背包(0-1背包的另类处理,dp)
题干: ycb的ACM进阶之路 Description ycb是个天资聪颖的孩子,他的梦想是成为世界上最伟大的ACMer.为此,他想拜附近最有威望的dalao为师.dalao为了判断他的资质,给他出了 ...
- (step3.3) hdu 1059(Dividing——多重背包)
题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...
- 1919: kirito's 星爆气流斩 多重背包
Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...
- 01背包模板、完全背包 and 多重背包
转载请注明出处:http://blog.csdn.net/u012860063 讲解链接:http://www.cppblog.com/tanky-woo/archive/2010/07/31/121 ...
- 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)
面对背包问题,有一个很重要的方程式:状态转移方程式 所以每一种背包问题我都会给出状态转移方程式 #01背包 什么是01背包型问题? 先给大家感受一下01背包型问题: 给定n种物品和一背包.物品i的重量 ...
- 最少硬币问题----多重背包
问题描述: 设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n ]中.现要用这些面值的硬币来找钱.可以使用的各种面值的硬币个数存于数组Coins[1:n ]中.对任意钱数0≤m≤20001,设计 ...
最新文章
- 雷军深情告白:在我心里,武汉大学是全球最好的大学
- LeetCode Number of Boomerangs
- Java 详解 JVM 工作原理和流程
- 【C++】简约的for循环
- 有哪些论文中最普遍出现的无效关键词?
- [攻防世界 pwn]——dice_game
- SAP Kyma和SAP云平台上的Service instance
- 【Flink】Flink NoSuchFieldError BIND_PORT
- 备考java二级_2017年计算机二级Java备考练习题库(2)
- 实数集r用区间表示为_七大实数理论与互推
- 【论文】最新图学习推荐系统综述 | Graph Learning Approaches to Recommender
- 还没休年假的小伙伴注意了...事关你的合法权益
- lua脚本语言学习(一)
- kettle数据脱敏
- Hermite(埃尔米特)插值法
- html吃豆豆游戏代码,HTML5 Canvas 来回简单版吃豆豆
- notion函数_最适合设计师的笔记软件 Notion
- 腾讯云折(tian)腾(keng)记
- A+B Problem (VIII) : Recursion Practice (Append Code)
- 原生threeJS入门
热门文章
- python编译器是用来干嘛的-python编译器和解释器的区别是什么
- Skipper自动获取gds里的pad坐标和label
- [Linux] xargs 命令的神奇之处。
- bullet物理系统功能及实现简介
- JavaScript聊天框插入表情: 点击表情时输入框失焦, 无法插入到输入框.
- 格林公式计算多边形的面积
- Mac上使用的FTP工具,YummyFTP
- linux查询日志命令加过滤,Linux记录-筛选日志sed、find、tail,du,awk命令
- 头部咨询管理企业的数字化转型之路
- C++中strtol函数的使用方法