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 混合背包 (动规+多重背包优化)相关推荐

  1. 背包问题-【01背包】【完全背包】【多重背包】【多限定条件背包】

    背包问题 给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高. 可参考https://www.cnblogs.com/-guz/p/9866118.h ...

  2. 小明打联盟 牛客(背包dp,多重背包)

    链接:https://ac.nowcoder.com/acm/problem/14553 来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放 ...

  3. 01背包模板、全然背包 and 多重背包(模板)

    转载请注明出处:http://blog.csdn.net/u012860063 贴一个自觉得解说不错的链接:http://www.cppblog.com/tanky-woo/archive/2010/ ...

  4. 【qduoj - 142】 多重背包(0-1背包的另类处理,dp)

    题干: ycb的ACM进阶之路 Description ycb是个天资聪颖的孩子,他的梦想是成为世界上最伟大的ACMer.为此,他想拜附近最有威望的dalao为师.dalao为了判断他的资质,给他出了 ...

  5. (step3.3) hdu 1059(Dividing——多重背包)

    题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...

  6. 1919: kirito's 星爆气流斩 多重背包

    Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...

  7. 01背包模板、完全背包 and 多重背包

    转载请注明出处:http://blog.csdn.net/u012860063 讲解链接:http://www.cppblog.com/tanky-woo/archive/2010/07/31/121 ...

  8. 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)

    面对背包问题,有一个很重要的方程式:状态转移方程式 所以每一种背包问题我都会给出状态转移方程式 #01背包 什么是01背包型问题? 先给大家感受一下01背包型问题: 给定n种物品和一背包.物品i的重量 ...

  9. 最少硬币问题----多重背包

    问题描述: 设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n ]中.现要用这些面值的硬币来找钱.可以使用的各种面值的硬币个数存于数组Coins[1:n ]中.对任意钱数0≤m≤20001,设计 ...

最新文章

  1. 雷军深情告白:在我心里,武汉大学是全球最好的大学
  2. LeetCode Number of Boomerangs
  3. Java 详解 JVM 工作原理和流程
  4. 【C++】简约的for循环
  5. 有哪些论文中最普遍出现的无效关键词?
  6. [攻防世界 pwn]——dice_game
  7. SAP Kyma和SAP云平台上的Service instance
  8. 【Flink】Flink NoSuchFieldError BIND_PORT
  9. 备考java二级_2017年计算机二级Java备考练习题库(2)
  10. 实数集r用区间表示为_七大实数理论与互推
  11. 【论文】最新图学习推荐系统综述 | Graph Learning Approaches to Recommender
  12. 还没休年假的小伙伴注意了...事关你的合法权益
  13. lua脚本语言学习(一)
  14. kettle数据脱敏
  15. Hermite(埃尔米特)插值法
  16. html吃豆豆游戏代码,HTML5 Canvas 来回简单版吃豆豆
  17. notion函数_最适合设计师的笔记软件 Notion
  18. 腾讯云折(tian)腾(keng)记
  19. A+B Problem (VIII) : Recursion Practice (Append Code)
  20. 原生threeJS入门

热门文章

  1. python编译器是用来干嘛的-python编译器和解释器的区别是什么
  2. Skipper自动获取gds里的pad坐标和label
  3. [Linux] xargs 命令的神奇之处。
  4. bullet物理系统功能及实现简介
  5. JavaScript聊天框插入表情: 点击表情时输入框失焦, 无法插入到输入框.
  6. 格林公式计算多边形的面积
  7. Mac上使用的FTP工具,YummyFTP
  8. linux查询日志命令加过滤,Linux记录-筛选日志sed、find、tail,du,awk命令
  9. 头部咨询管理企业的数字化转型之路
  10. C++中strtol函数的使用方法