
AcWing 5. 多重背包问题 II(二进制优化的多重背包问题dp)
发布日期:2021-05-07 14:08:49
浏览次数:16
分类:原创文章
本文共 1658 字,大约阅读时间需要 5 分钟。
有 N 种物品和一个容量是 V的背包。
第 ii 种物品最多有 si 件,每件体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。
输入格式
第一行两个整数,N,V,V,用空格隔开,分别表示物品种数和背包容积。
接下来有 N 行,每行三个整数 vi,wi,,si,用空格隔开,分别表示第 ii 种物品的体积、价值和数量。
输出格式
输出一个整数,表示最大价值。
数据范围
0<N≤10000<N≤1000
0<V≤20000<V≤2000
0<vi,wi,si≤20000<vi,wi,si≤2000
提示:
本题考查多重背包的二进制优化方法。
输入样例
4 51 2 32 4 13 4 34 5 2
输出样例:
10
思想:之后就是选与不选。将其转化为01背包问题!
//不需要枚举那么多,将其分组,分组之后的合并和之前枚举的一样即可,相当于买一包不买一个import java.io.*;import java.lang.*;class Main{ static int n = 0, m = 0, N = 20010; static int[] f = new int[N]; static int[] v = new int[N], w = new int[N]; public static void main(String[] args)throws Exception{ BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); String[] params = buf.readLine().split(" "); n = Integer.valueOf(params[0]); m = Integer.valueOf(params[1]); int cnt = 0; for(int i = 1; i <= n; ++i){ int k = 1; String[] info = buf.readLine().split(" "); int a = Integer.valueOf(info[0]); int b = Integer.valueOf(info[1]); int s = Integer.valueOf(info[2]); while(k <= s){ cnt++; v[cnt] = a * k; w[cnt] = b * k; s -= k; k *= 2; } if(s > 0){ cnt++; v[cnt] = a * s; w[cnt] = b * s; } } n = cnt; for(int i = 1; i <= n; ++i){ for(int j = m; j >= v[i]; --j){ f[j] = Math.max(f[j], f[j - v[i]] + w[i]); } } System.out.print(f[m]); }}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月23日 21时35分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
紫书——蛇形填数
2019-03-04
刷题计划1——poj1753
2019-03-04
蓝桥杯备战——刷题(2019)
2019-03-04
未定义的变量“py”或函数“py.command”
2019-03-04
我们,都一样......(句句入心)
2019-03-04
总结了一下c/c++函数和变量的命名规则
2019-03-04
关于构造函数内调用虚函数的问题
2019-03-04
最短路径问题—Dijkstra算法
2019-03-04
求二叉树的深度
2019-03-04
万物皆可爬系列查看翻页翻到最后是什么
2019-03-04
A Guide to Node.js Logging
2019-03-04
webwxbatchgetcontact一个神奇的接口
2019-03-04
Edge浏览器:你的的内核我的芯
2019-03-04
git命令升级版用法
2019-03-04
sed常用命令
2019-03-04
checksec未完待续~
2019-03-04
python pexpect
2019-03-04
inode索引节点的概念
2019-03-04
create-react-app第一步
2019-03-04
怎么去利用已有的数据做分析?
2019-03-04