当前位置: 首页 > backend >正文

AcWing 11:背包问题求方案数 ← 0-1背包

【题目来源】
https://www.acwing.com/problem/content/11/

【题目描述】
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 i 件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出
最优选法的方案数。注意答案可能很大,请输出答案模 10^9+7 的结果。

【输入格式】
第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。

【输出格式】
输出一个整数,表示方案数模 10^9+7 的结果。

【数据范围】
0<N,V≤1000 
0<vi,wi≤1000

【输入样例】
4 5
1 2
2 4
3 4
4 6

【输出样例】
2

【算法分析】
设 f[i] 为背包容积为 i 时的最佳方案的总价值,cnt[i] 为背包容积为 i 时总价值为最佳的方案数。
由于背包里什么也不装也是一种方案,故初始化所有的 cnt{i] 为 1。
如果装新物品的方案总价值更大,那么用 f[j-vol]+val 来更新 f[j],用 cnt[j-vol] 更新 cnt[j]。
如果总价值相等,那么最大价值的方案数就多了 cnt[j-vol] 种。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int MOD=1e9+7;
const int N=1e3+5;
int f[N],cnt[N];int main() {int n,v;cin>>n>>v;for(int i=0; i<=v; i++) cnt[i]=1;for(int i=1; i<=n; i++) {int vol,val;cin>>vol>>val;for(int j=v; j>=vol; j--) {int t=f[j-vol]+val;if(t>f[j]) {f[j]=t;cnt[j]=cnt[j-vol];} else if(t==f[j]) {cnt[j]=(cnt[j]+cnt[j-vol])%MOD;}}}cout<<cnt[v]<<endl;return 0;
}/*
in:
4 5
1 2
2 4
3 4
4 6out:
2
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/147326357
https://blog.csdn.net/hnjzsyjyj/article/details/147333181
https://www.acwing.com/solution/content/3999/



 

http://www.xdnf.cn/news/384.html

相关文章:

  • 与终端同居日记:Linux指令の进阶撩拨手册
  • docker底层原理
  • 如何给云开发生成的智能体增加权限判断
  • AtCoder ABC402 A~D 题解
  • 数据驱动未来:大数据在智能网联汽车中的深度应用
  • Visio导出清晰图片步骤
  • npm 常用操作和配置
  • uv:重新定义Python开发效率的下一代工具链
  • 高可靠 ZIP 压缩方案兼容 Office、PDF、TXT 和图片的二阶段回退机制
  • 【今日三题】打怪(模拟) / 字符串分类(字符串哈希) / 城市群数量(dfs)
  • Cril 截取字段-生成hostname
  • Git命令归纳
  • 少儿编程路线规划
  • Docker Overlay 网络的核心工作(以跨节点容器通信为例)
  • 公务员行测之速算分数记忆检验-无答案版本
  • 《从理论到实践:CRC校验的魔法之旅》
  • Benewake(北醒) TF-NOVA 在通过TTL-USB转接板更改配置教程
  • VUE快速入门-4:简单入门案例
  • eplan许可证无法识别硬件信息
  • if/switch语句初始化功能
  • MySQL内置函数:字符串函数,数值函数,日期函数,流程控制函数
  • 【unity实战】Unity动画层级(Animation Layer)的Sync同步和Timing定时参数使用介绍,同步动画层制作角色的受伤状态
  • 数据结构基本概念
  • 如何导出pip下载的paho-mqtt包
  • 1.了解开发行业
  • 解析:深度优先搜索、广度优先搜索和回溯搜索
  • OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理
  • JavaScript 所有操作数组的方法
  • Spring Bean 全方位指南:从作用域、生命周期到自动配置详解
  • pip 的包下载之后存放在哪?