当前位置:网站首页>多重背包问题 ← 规模小时可转化为0-1背包问题
多重背包问题 ← 规模小时可转化为0-1背包问题
2022-08-06 12:16:00 【hnjzsyjyj】
【题目来源】
https://www.acwing.com/problem/content/4/
【题目描述】
有 N 种物品和一个容量是 V 的背包。
第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。
【输入格式】
第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。
接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。
【输出格式】
输出一个整数,表示最大价值。
【数据范围】
0<N,V≤100
0<vi,wi,si≤100
【算法分析】
背包问题,求解的是“将某些种物品装入背包,......”,而不是求解“将某些个物品装入背包,......”的问题。切记。
多重背包问题,每种物品有有限多个;
完全背包问题,每种物品有无限多个;
0-1背包问题,每种物品只有一个。
由于本题给出的多重背包问题的问题规模不大,所以可以用“暴力拆分”的方法,将原多重背包问题中的第 i 种物品视为只有一个的某种物品,这样就可将多重背包问题转化为0-1背包问题。示意图如下所示:

切记,“暴力拆分”的方法只适用于问题规模不大的多重背包问题。若问题规模较大,必然会TLE。因此,对于问题规模较大的多重背包问题,就需要进行二进制优化。
实例详见:https://blog.csdn.net/hnjzsyjyj/article/details/109363826
【算法代码】
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int c[maxn];
int val,vol,type;
main() {
int n,V;
cin>>n>>V;
for(int k=1;k<=n;k++) {
cin>>vol>>val>>type;
for(int i=1; i<=type; i++)
for(int j=V; j>=vol; j--)
c[j]=max(c[j],c[j-vol]+val);
}
cout<<c[V];
return 0;
}
/*
in:
4 5
1 2 3
2 4 1
3 4 3
4 5 2
out:
10
*/
【参考文献】
https://www.acwing.com/problem/content/4/
https://blog.csdn.net/hnjzsyjyj/article/details/109363826
边栏推荐
猜你喜欢

mayavi可视化kitti

高性能云原生数据对象存储MinIO实战-上

锐捷MPLS 网络配置实例 ---尚文网络奎哥

Absolutely!Ali people explain tens of billions of high-concurrency systems in 7 parts (full-color booklet open source)

Kubernetes微服务、容器介绍

数字化转型怎么就那么的难?!
![微服务架构 | 分布式事务 - [Seata]](/img/a6/84d09ea07a4dc7c33ffa1f237db976.png)
微服务架构 | 分布式事务 - [Seata]

SQL 注入复习总结

【SQL刷题】Day2----SQL语法基础查询

Flexible and easy-to-use sql monitoring script part4
随机推荐
Week 7 Learning Representation with Auto-Encoder (Unsupervised Learning)
机器学习实战-梯度下降法在线性回归模型中的使用
LeetCode_1046_最后一块石头的重量
Apscheduler scheduled task
Link Aggregation Brief
【SSL集训DAY1】D【动态规划】【状态压缩】
哈希表 | 基础知识总结
【SSL集训DAY1】B【动态规划】
SQL 注入复习总结
Zero with culture and art of tourism development of science and technology center "cultural art chain"
【SSL集训DAY1】C【暴力】【数学】
PHP fopen写入文件内容
LeetCode 897. Searching Trees in Ascending Order
SQL图解面试题:人均付费如何分析?(分组、条件汇总)
SQL图解面试题:如何分析员工奖金?(多表连接、case when)
Week 7 Learning Representation with Auto-Encoder(无监督学习)
哈希表 | 快乐数 | leecode刷题笔记
QT: Using custom signals and slots
PS6652+JD6606S_2C 35W双C口PD协议方案
【SSL集训DAY1】A【BFS】