九大背包问题专题--背包问题求方案数
7.背包问题求方案数
问题:
有N件物品和一个容量是V的背包。
每件物品只能用一次,第i件物品的体积是vi,价值是wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包的容量,且价值总和最大。
输出最优选法方案数。注意答案可能很大,请输出答案模10^9+7的结果
输入格式
第一行有两个整数,N,V用空格隔开,分别表示物品数量、背包容积。
接下来有N行,每行两个个整数vi,wi,用空格隔开,分别表示第i件物品的体积、价值。
输出格式
输出一个整数,表示方案数模10^9的结果。
数据范围
0<N,V<=1000
0<V,M<=1000
输入样例
4 5
1 2
2 4
3 4
4 6
输出样例
2
分析思路:
f[i]:体积是恰好j的情况下,最大价值是多少
g[i]:体积是j的情况下, 方案数是多少
第一种决策,最大值和最优解一样
先算选和不选两种方案最大价值是多少,看到底从哪个决策转移过来
假设其中一个比另外一个大 ,只能从其中一种决策转移过来 (选择决策的方案数)
若两种决策答案一样 ,把两种决策方案数都要选择
更新的时候同时需要更新g数组
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;const int N=1010,mod=1000000009,INF=1000000;
int n,m;
int f[N],g[N]; //g[i]体积是j的情况下 方案数是多少
int main(){ //f[j]体积恰好是j的情况下 cin>>n>>m;g[0]=1; //体积是0的方案数只有1种 for(int i=1;i<=m;i++) f[i]=-INF; //f[0]=0,除此之外初始状态记为负无穷,所有状态从0开始更新 for(int i=0;i<n;i++) //枚举物品 {int v,w;cin>>v>>w;for(int j=m;j>=v;j--) //从大到小枚举体积 {int t=max(f[j],f[j-v]+w); //第一种决策,最大值和最优解一样 int s=0;if(t==f[j]) s+=g[j]; //两种都选择if(t==f[j-v]+w) s+=g[j-v]; //第二种决策,最大值和最优解一样,两种都选择if(s>=mod) s-=mod; //答案和大于10^9,减去这个数 f[j]=t; //记录最优解 g[j]=s; //记录方案数 }}//统计最优解方案数,遍历整个数组,最优解不一定是f,不一定要用满f的体积才能得到 int maxw=0;for(int i=0;i<=m;i++) maxw=max(maxw,f[i]);int res=0;for(int i=0;i<=m;i++) //所有等于最优解的方案 if(maxw==f[i]){res+=g[i]; //加上体积是i的方案数 if(res>=mod)res-=mod;}cout<<res<<endl;return 0;
}
九大背包问题专题--背包问题求方案数相关推荐
- 九大背包问题专题--背包问题求具体方案数
8.背包问题求具体方案数 问题: 有N件物品和一个容量是V的背包. 每件物品只能用一次,第i件物品的体积是vi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包的容量,且价值总和最 ...
- 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数
1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi,价值是 wiw_iwi.求解将哪些物品装入背包,可使这些物品 ...
- 经典背包问题3——背包问题求方案数 、背包问题求具体方案
经典背包问题3--背包问题求方案数 .背包问题求具体方案 1. 背包问题求方案数 2. 背包问题求具体方案 1. 背包问题求方案数 有 N 件物品和一个容量是 V的背包.每件物品只能使用一次. 第 i ...
- 自然数拆分(完全背包问题求方案数)
给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复. 注意: 拆分方案不考虑顺序: 至少拆分成2个数的和. 求拆分的方案数 mod 2147483648的结果. 输入格式 ...
- [01背包] 背包问题求具体方案(01背包+求方案数+思维)
文章目录 0. 前言 1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包+求方案数+思维 12. 背包问题求具体方案 求方案数也是背包问题.dp 的 ...
- 动态规划之如何将问题抽象转化为0-1背包问题(详解利用动态规划求方案数)
⭐️前面的话⭐️ 本篇文章介绍如何对问题抽象转化成0-1背包问题求解和运用0-1背包求方案数.
- [完全背包] 货币系统(完全背包+求方案数)
文章目录 0. 前言 1. 完全背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 强相关: [完全背包] 买书(完全背包+裸题) [完全背包] 货币系统(完全背包+求方案数 ...
- 7-30 找单词——多重背包求方案数
假设有x1个字母A, x2个字母B,- x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,- 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的单词呢?单词的价值就是 ...
- [01背包] 数字组合(01背包+求方案数)
文章目录 0. 前言 1. 01背包求方案数 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包求方案数 278. 数字组合 将 M 看作背包容量,每个数看成一个物品,Ai 看成是 ...
- 观光(最短路求方案数2)
题目描述 "您的个人假期"旅行社组织了一次比荷卢经济联盟的巴士之旅. 比荷卢经济联盟有很多公交线路. 每天公共汽车都会从一座城市开往另一座城市. 沿途汽车可能会在一些城市(零或更多 ...
最新文章
- VC++下命名管道编程的原理及实现
- 【计算机网络(微课版)】第5章 传输层 课后习题及答案
- 中商惠民李超:500,000+ 便利店背后的精细化管理
- c++ properties_Java怎么从这四个位置读取配置文件Properties(普通文件系统-classpath-jar-URL)
- 牛客 - Dance with a stick(大风车模型)
- Flink SQL Client注册Python UDF完整流程
- Git和GitHub快速入门
- 洛谷——P2820 局域网
- 一级计算机考试电子表格排序筛选,重新应用Excel排序和筛选或清除筛选
- 通过UA判断手机的类型
- 金融人都在选择的硕士项目---中国人民大学与加拿大女王大学金融硕士
- CSS第7章上机练习1(制作QQ会员页面导航)
- 摄影测量中的什么是光流场_摄影中的“停止”是什么?
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- 限期4个月:苹果严控版号,开发者将如何自救?
- 给软件添加鼠标右键快捷方式
- c++ 因数分解(递归)
- (2020)使用Airtest来爬取某宝评论数据
- [JIRA] 从3.6.2旧版升级到新版6.0.8的详细过程
- 工作流模式每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。 动态表单 外置表单 普通表单
热门文章
- 基于安卓的高清语音技术亮相中国国际通信展览会
- C语言圆角矩形画法,GDI+ 如何绘制圆角矩形(vc++)
- 浅谈OSPF的DRBDR
- 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
- POJ1417 True Liars —— 并查集 + DP
- 【PPT技巧】让PPT背景音乐仅在播放视频时暂停
- 图片转公式再转到word或者wps里面
- Overture五线谱乐理小课堂——音程 (上)
- 【学习笔记】组合恒等式
- 035 导数 微分对应表