完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
科大讯飞:星火原生应用打造智能办公与社交新体验
什么是成交量和成交额?他们对股价的影响
脾虚湿气重针灸能根治吗
【心理健康】搞好人际关系最有效的方法:坚持“梅拉宾法则”
宝可梦剑盾剑版与盾版有哪些不同?带你了解版本差异!
标准养护室试件的养护条件详解
与父母的择偶观不同,到底应该听谁的?
直播电商VS传统批发:谁在抢走小商品市场的生意?
《妄想山海》新手攻略:从零开始的全面指南
Excel透视表:快速计算数据分析指标的利器
身体这个部位疼痛要当心,可能是骨癌在潜伏
胰腺癌晚期腹水加重的表现与缓解治疗方案
从两峰夹小溪地湿又无泥看游戏场景的设计:如何打造生动的虚拟世界
选月嫂攻略!找月嫂之前一定要了解这些
田忌赛马:以弱胜强的策略与智慧
中年人适合买什么保险险种
流感≠感冒!真的不要再混淆了!这些区别你一定要知道
视频加歌词字幕:从入门到进阶效果都有!
庐江赏花地图上线,七大花卉最佳观赏时间全攻略
孙悟空在神仙中是什么等级?天庭的最高层都有谁?
合同翻译的心得体会:如何确保翻译准确无误
校园网DNS设置问题,如何正确配置以提高网络访问速度?
巧用视觉专注互动训练工具,助力儿童成长
从游戏显卡到AI之王:黄仁勋的三十年“逆袭”
1比2不敌澳大利亚 U20国足小组第二出线
KET/PET官方备考教材:Complete与Compact的选择建议
不是所有腰痛做麦肯基训练都是有效的
多个Excel筛选表格怎么数据汇总
B端页面地图组件设计指南:从原则到技巧
世界上最聪明的 10 种动物