当前位置:网站首页>01背包问题(动态规划)
01背包问题(动态规划)
2022-08-02 03:28:00 【Aiolei】
1. 问题
有 n 个物品,它们有各自的重量 weight 和价值 value,现有给定容量 C 的背包,如何让背包里装入的物品具有最大的价值?每个物品只能使用一次。
2. 分析
需要求解的是:最大价值 MaxValue
约束条件:选择的物品总重量 < C
递推公式(面对当前物品可能有两种情况):
(1)包的容量比该物品体积小,装不下,此时的价值与前 i-1 个的价值是一样的,因此 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] dp[i][j] = dp[i-1][j] dp[i][j]=dp[i−1][j]
(2)可以装该物品,但装进去不一定是当前最大价值,比较装进去后和不装的价值大小,取较大的那一个,因此 d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ j − w [ i ] ] + v [ i ] ) dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]) dp[i][j]=max(dp[i−1][j],dp[i−1][j−w[i]]+v[i])
3. 代码
#include<iostream>
#include<cmath>
using namespace std;
int C; //背包容量
int number; //物品数量
int w[10], v[10]; //物品的重量和价值
int dp[10][10] = {
{
0}}; //保存价值的二维数组--动态规划
//找到最大价值
void MaxValue()
{
for(int i = 1;i <= number;i++){
//注意:i,j从1开始
for(int j = 1;j <= C;j++){
if(j < w[i]) //不能装
dp[i][j] = dp[i-1][j];
else //装
dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
}
}
}
int main()
{
cout<<"01背包问题"<<endl;
cout<<"Please input the bag's capacity:";
cin>>C;
cout<<"Please input goods' number:";
cin>>number;
cout<<"Please input goods' weight:";
for(int i = 1;i <= number;i++){
//注意:i从1开始
cin>>w[i];
}
cout<<"Please input goods' value:";
for(int i = 1;i <= number;i++){
cin>>v[i];
}
MaxValue(); //找到最大价值 -- 动态规划
cout<<"\n(1)动态规划\nThe bag's max vlaue is :"<<dp[number][C]<<endl;
cout<<"The values of dp[][] are as follows:\n";
for(int i = 0;i <= number;i++){
//输出dp数组
for(int j = 0;j <= C;j++){
cout<<dp[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
4. 效果

边栏推荐
猜你喜欢

面试必备:Android性能分析与优化实战进阶手册

一分钟get:缓存穿透、缓存击穿、缓存雪崩

解决flex布局warp自动换行下最后一行居中问题

Acwing:哈夫曼树(详解)

Laravel 登录,中间件和路由分组

Laravel打印执行的SQL语句

树莓派4b安装win11/10过程全教程(附蓝屏inaccessible boot device解决办法)

账务处理程序、记账凭证账务处理程序、汇总记账凭证账务处理程序、科目汇总表账务处理程序、会计信息化概述、信息化环境下会计账务处理的基本要求(此章出1道小题)

Temporal Segment Networks:Towards Good Practices for Deep TSN论文精读笔记

什么是广告电商商业模式?这几个门派告诉你
随机推荐
win10内存占用很高,关闭所有应用程序依然降不下来(win11)
The first time to tear the code by hand, how to solve the problem of full arrangement
Temporal Segment Networks:Towards Good Practices for Deep TSN论文精读笔记
Laravel打印执行的SQL语句
synchronized锁原理详解
Vision Transformer(ViT)论文精读和Pytorch实现代码解析
深入了解为何面试官常说:你还没准备好,我不会录用你
解决composer安装太慢 更换国内镜像
解密:链动2+1的商业模式
laravel-admin 线上访问项目,一直重定向到登录页面
管理会计(对内)指引、管理会计要素及其具体内容(可能考,考前记一下,推荐记一下四个大点即可)、
Go Build报错汇总(持续更新)
centos8 安装搭建php环境
蓝桥杯:国二选手经验贴 附蓝桥杯历年真题
kotlin语法总结(二)
英语每日打卡
连接本地MySql时出现2003-Can‘t connect to MySql server on ‘localhost‘(10061)
《scala 编程(第3版)》学习笔记2
张量乘积—实验作业
账务处理程序、记账凭证账务处理程序、汇总记账凭证账务处理程序、科目汇总表账务处理程序、会计信息化概述、信息化环境下会计账务处理的基本要求(此章出1道小题)