当前位置:网站首页>完全背包问题(动态规划)
完全背包问题(动态规划)
2022-08-02 03:28:00 【Aiolei】
1. 问题
有 n 个物品,它们有各自的重量 weight 和价值 value,现有给定容量 C 的背包,如何让背包里装入的物品具有最大的价值?每个物品能够使用多次。
2. 分析
需要求解的是:最大价值 MaxValue
约束条件:选择的物品总重量 < C
递推公式:如果 k ∗ w [ i ] < = j k * w[i] <= j k∗w[i]<=j 说明可以装入该物品,循环装进去 1,2,3…k 个,因此 d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ i − 1 ] [ j − k ∗ w [ i ] ] + k ∗ v [ i ] ) dp[i][j] = max(dp[i][j], dp[i-1][ j-k*w[i] ] + k * v[i]) dp[i][j]=max(dp[i][j],dp[i−1][j−k∗w[i]]+k∗v[i])
3. 代码
#include<iostream>
#include<cmath>
using namespace std;
int C; //背包容量
int number; //物品数量
int w[10], v[10]; //物品的重量和价值
int dp[10][15] = {
{
0}}; //保存价值的二维数组--动态规划
//找到最大价值
void MaxValue()
{
for(int i = 1;i < number;i++){
for(int j = 1;j <= C;j++){
for(int k = 0;k*w[i] <= j;k++){
dp[i][j] = max(dp[i][j],dp[i-1][j-k*w[i]]+k*v[i]);
}
}
}
}
int main()
{
cout<<"完全背包问题"<<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-1][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. 效果

边栏推荐
猜你喜欢

Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx

机器学习预备知识

成本会计的概念、产品成本核算的要求、产品成本核算的对象与成本项目、产品成本的归集和分配(可能考判断)、产品成本计算方法 (三种:产品的品种(品种法),批次(分批法),步骤(分步法))

【一句话攻略】彻底理解JS中的回调(Callback)函数

深度学习理论:测试集与验证集的区别及各自用途

研发过程中的文档管理与工具

从Attention到Self-Attention和Multi-Head Attention

2021-09-04 最简单的Golang定时器应用以及最简单的协程入门儿

在 UUP dump 被墙的情况下如何用 UUP 下载 ISO 镜像

2022年中高级 Android 大厂面试秘籍,为你保驾护航金九银十,直通大厂
随机推荐
树莓派4b安装win11/10过程全教程(附蓝屏inaccessible boot device解决办法)
连接本地MySql时出现2003-Can‘t connect to MySql server on ‘localhost‘(10061)
php laravel框架生成二维码
自定义view实现半圆弧进度条
阿里技术官手码12W字面试小册
关于我的项目-微信公众号~
深入了解为何面试官常说:你还没准备好,我不会录用你
研发过程中的文档管理与工具
Glide中图片处理
挖矿是什么意思?矿工都做了什么?
考(重点理解哪些属于其他货币资金)、其他货币资金的内容、其他货币资金的账务处理(银行汇票存款、银行本票存款、信用卡存款、信用证保证金存款、存出投资款、外埠存款)
关于我的项目-实现一个数据库~
记账凭证的种类、记账凭证的基本内容、记账凭证的填制要求、记账凭证的审核
会计账簿、会计账簿概述、会计账簿的启用与登记要求、会计账簿的格式和登记方法
蓝桥杯:国二选手经验贴 附蓝桥杯历年真题
深度学习理论:model.fit 函数参数详解
哈工大2021机器学习期末考试题
无源域适应(SFDA)方向的领域探究和论文复现(第一部分)
Spark特征工程-one-hot 和 multi-hot
Android-Kotlin anko库实现优雅跳转