完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
CSDN
1.
https://blog.csdn.net/weixin_53824622/article/details/140009493
完全背包问题与0-1背包问题的主要区别在于物品的选取次数:0-1背包问题中每个物品只能选取一次,而完全背包问题中每个物品可以无限次选取。本文将通过一个具体示例,详细介绍如何使用二维数组来解决完全背包问题。
问题描述
设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。
输入格式
- 第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);
- 第2..N+1行:每行两个整数Wi,Ui,表示每个物品的重量和价值。
输出格式
仅一行,一个数,表示最大总价值。
输入样例
10 4
2 1
3 3
4 5
7 9
输出样例
12
代码实现
#include<iostream>
using namespace std;
int w[201],c[31];
int value[201][201];//第一个参数代表的是前n件物品,后一个参数代表的是物品的价值。
int main(){
int m,n;//m,n分别代表背包容量和物品数量。
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>w[i]>>c[i];//w和c分别代表容量和价值。
for(int i=1;i<=n;i++)//先遍历物品。
{
for(int j=1;j<=m;j++)//再遍历背包。
{
//如果当前背包容量小于物品容量,那么无法放入到背包中,背包的价值依旧是前一个容量的价值。
if(w[i]>j){
value[i][j]=value[i-1][j];
}
//如果当前背包容量大于物品容量,那么这时候可以选择放与不放,看下这两种情况哪种价值大。
if(j>=w[i])
value[i][j]=max(value[i-1][j],value[i][j-w[i]]+c[i]);
}
}
cout<<value[n][m];
}
运行结果
热门推荐
川味经典,美食“扛把子”——宫保鸡丁
人工智能将重塑律师职业的工作模式
个人开发者安卓APP开发软件选型要点
如何选择可靠的租房中介?这些中介如何影响租房体验?
父母起诉子女赡养费案例解析与法律适用
成年人最顶级的养生:运动
中国电竞行业:面临挑战但期待涅槃重生
人口的转变:应对超低生育率的海外经验
分时量现手:股市交易活跃度的重要指标
塘栖广济桥:京杭大运河上的千年瑰宝
支气管镜检查后的护理措施
武汉职业技术大学来了!
大姜病虫害管理技术
10万做什么理财收益大(10万元如何实现最高收益?)
离职后能否起诉公司未交社保?公积金又该如何处理?
设计和选择一个适合的环境监控系统要考虑哪些?
传统钓立漂单钩如何调漂?4步告诉你答案_清晰图解
君子兰开花周期及其养护方法(每年开花时间长短因何而异?如何提高开花率?)
电表原理全解析:从安装到读数的科学奥秘
古韵今味山海关
上海体育大学:人工智能助力体育教育、科技、人才一体化发展
人社部拟增加19个新职业,数字经济、绿色、美好生活成关键词
什么是光纤跳线?一文详解其分类、接口类型及使用注意事项
ACTH医学上是什么意思
ACTH医学上是什么意思
在家如何护理流感患儿?孩子高热惊厥怎么办?这些要点需牢记
服务器硬盘尺寸规格详解:如何选择适合的硬盘?
美元指数走势的三大影响因素:贸易摩擦、资本流动与"美元荒"
电动车安全性能分级:从基础防护到智能预警,哪个品牌最安全?
“莓”果抗氧化又抗炎