背包问题求方案数

背包问题求方案数、具体方案 阅读详情

背包问题求方案数

-------来源acwing
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 i 件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+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

我的代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
const int mod=1e9+7;
int f[N];
int s[N];
int main()
{
    int n,m; cin>>n>>m;
    for(int i=0;i<=m;i++) s[i]=1;
    while(n--){
        int v,w;cin>>v>>w;
        for(int j=m;j>=v;j--){
            if(f[j-v]+w>f[j]){
                f[j]=f[j-v]+w;
                s[j]=s[j-v];
            }
            else if(f[j-v]+w==f[j]){
                s[j]=(s[j]+s[j-v])%mod;
            }
            
        }
    }
    // for(int i=0;i<=m;i++)   cout<<i<<' '<<s[i]<<endl;
    cout<<s[m]%mod<<endl;
    
    return 0;
}

题解:

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
const int mod = 1e9+7;
const int INF = 1e9;
const int N = 10001;
int n,m,f[N],g[N];
int w[N],v[N];
void init(){
    g[0] = 1;
    f[0] = 0; 
    for(register int i=1; i<=m; i++) f[i] = -INF;
}
int main() {
    scanf("%d%d",&n,&m);
    init();
    for(register int j=1; j<=n; j++) scanf("%d%d",&w[j],&v[j]);
    for(register int i=1; i<=n; i++) {
        for(register int j=m; j>=w[i]; j--){
            int tmp = max(f[j], f[j-w[i]]+v[i]);
            int s = 0;
            if(tmp==f[j]) s += g[j];
            if(tmp==f[j-w[i]]+v[i]) s += g[j-w[i]];
                //这里不能写else if,因为若两决策的答案一样,要把两种决策的方案都算上
            f[j] = tmp;
            g[j] = s%mod;
        }
    }

    int maxn=0, ans=0;
    for(register int i=1; i<=m; i++) maxn = max(maxn,f[i]);
    for(register int i=1; i<=m; i++) {
        if(maxn==f[i]) {
            ans += g[i];
            ans %= mod;
        }
    }
    printf("%d\n",ans);
    return 0;
}

C++背包问题——完全背包必须装满的方案数 想要了解,就得先了解,点击下面方框查看()C++背包问题——完全背包_闪耀的天狼星的博客-优快云博客一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。,再来看题目,顾名思义,背包必须装满(限制条件必须刚好满足)... 阅读详情

相关推荐

回溯法 0-1背包问题 C++

给定N种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为c。应该如何选择装入背包的物品,使装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包,不能将物品i装入背包多次,也不能只装入部分的物品i

c++背包九讲之背包问题求方案数

一、背包九讲总述 关于动态规划问题,最典型的就是背包九讲,先理解背包九讲后再总结关于动态规划的问题 1、01背包问题 2、完全背包问题 3、多重背包问题 4、混合背包问题 5、二维费用的背包问题 6、分组背包问题 7、背包问题求方案数 8、求背包问题的方案 9、有依赖的背包问题 往前6篇博文已经介绍了前6个问题,有需要的同学可以看一下!! 二、背包问题求方案数 背包问题求方案数:设背包容量为C...

weixin_42579072的博客 3225

国密(3)- 预主密钥/主密钥计算和Finished消息的加解密

国密的ECC-SM3-SM4-CBC模式下的预主密钥和主密钥的生成过程介绍,以及Finished消息的加解密介绍

weixin_43408952的博客 6512

C++---背包模型---背包问题求方案数(每日一道算法2023.3.26)

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

SRestia的博客 712

经典算法之——解决全排列问题以及详解

回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];

m0_68987535的博客 8795

LibreNMS实战:5分钟搞定Docker部署与中文配置(附常见问题排查)

本文详细介绍了如何使用Docker在5分钟内快速部署LibreNMS,并完成中文界面优化。从环境准备到容器启动,再到中文语言包安装和系统配置调整,提供了完整的实战指南。同时,文章还包含常见问题排查和性能调优建议,帮助用户高效搭建网络监控系统。

e1f2g的博客 1281

【动态规划】背包问题详解

01背包问题 输入 4 5 1 2 2 4 3 4 4 5 输出 8 题解 核心思路 1. 矩阵 f 初始化为全零,这样可以保证只要体积不超过 j 都能装入 f[i][j] : 即从前 i 个物品中选,总体积不超过 j 的方案数。 f[i - 1][j - v] 表示: 当前为要处理的物品 i, 当满足 j >= v 时, 当前物品可以装入, 计算装入后是否会使得总价值变大,所以需要从之前的 i - 1, j - v, 转移过来用来代表 f[i][j] 当背包容量够时: 选:f[i][j

青年有志 3331

使用Matlab实现海洋监视雷达检测仿真

海洋监视雷达是一项重要的海洋探测技术,可以用于海上船只、飞机、潜艇等目标的探测和监视,具有广泛的应用价值。本篇文章将介绍如何使用Matlab进行海洋监视雷达的检测仿真,并提供相应的源代码。本篇文章提供了利用Matlab进行海洋监视雷达检测仿真的基本思路和代码实现。读者可以根据自己的需求进行修改和优化,以适应不同的应用场景。使用Matlab实现海洋监视雷达检测仿真。

2301_78484069的博客 448

动态规划——背包问题(个别)

背包问题略讲

m0_63352574的博客 1277

高性能优化的本质

在很早之前,处理器性能的提升一般是通过减小元器件的尺寸,增加元器件的数量,提高主频来实现,这也是摩尔定律所说的,但是由于功耗的影响,主频不能一直增加。后来,由于英伟达的GPU的并行计算的出现,逐渐打破摩尔定律,人们利用多核,SIMD,SIMT来处理大量相同计算的数据,这极大的提高了效率。计算机的算力得到了巨大的提升,但是并行是困难的,对于有数据依赖的程序来说,处理并行是一件及其困难的事,但对于一些简单的数学库的计算,并行的实现相对简单。

发狂的小花的博客 274

SerDes系列之如何选择AC耦合电容

交流耦合电容用于隔离PCB互连时的直流分量(Common-mode voltage),同时传递交流分量(Voltage swing),其作用类似于一个高通滤波器,但是,如果电容容值选取不当,使用过程中会产生信号质量问题,典型的应用场景:当包含相同的长串1或0的NRZ数据应用于该高通滤波器时,会发生低频电压跌落,导致低频模式相关抖动(PDJ)。

一只豌豆象的博客 2351

背包九讲——背包问题求方案数

背包问题涉及到了三种基础的背包:01背包、多重背包、完全背包,我们要根据在这几个背包的基础上去计算在获得最大价值的情况下,有几种方案,并输出方案数。

闻道有先后,术业有专攻 2762

MCAL中MCU的配置

MCAL配置中MCU配置,PLL计算配置,系统时钟以及各模块参数配置

dhyw12399999的博客 3794

背包问题求方案数、背包问题求具体方案

闫神视频笔记 视频链接 在01背包的基础上要求出最优解的方案数 背包问题求方案数(题目链接) 解题思路: 我们可以设置一个与数组f功能类似的数组g,其中f[i]保存的是体积等于i的最优解(这里是等于,之前的博客说的是小于等于,原因后面会说),而g[i]保存的是体积等于i时的最优解的方案数,而f[i]为什么保存的是等于i的最优解的原因是这样更有利于计算方案数(比如最优解的情况下,体积是4,但是背包的容量是6,如果按小于等于来保存结果,最后统计方案数的时候会把体积是5和6的也计算在内,导致重复计算,因为体积

lmmmmmmmmmmmmmmm的博客 1358

成本中心(CO)和利润中心(PCA)是管理会计模块的核心组件

SAP中成本中心(CO)和利润中心(PCA)凭证处理存在差异:①外部交易(如费用支付、销售)会生成FI借贷凭证;②内部成本分摊和转移仅产生CO/PCA管理凭证,通过次级成本要素或利润中心转移科目记录,不涉及FI模块。核心区别在于是否涉及企业实际收支:实际收支触发FI凭证,内部核算仅生成管理会计凭证。系统通过这种机制实现财务会计与管理会计的集成与分离。

金牌架构师 1128

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

经典背包问题3——背包问题求方案数 、背包问题求具体方案

经典背包问题3——背包问题求方案数 、背包问题求具体方案1. 背包问题求方案数2. 背包问题求具体方案 1. 背包问题求方案数 有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。 第 i件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+7的结果。 输入格式 第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。 接下来有 N行,每行两个整数 vi,wi,用空格隔

kuanyew的博客 2753

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

背包9讲_背包问题求方案数

根据f[j]初始化不同会有两种解法 即f[]状态的定义不同,会有不同的状态转移方程; 具体参考acwing 我们采用与0~1背包相似的状态方程定义方式: f[i][j]表示从前i个物品中选择,体积不超过j的价值,g[i][j]表示从前i个物品中选择 体积不超过j的最大价值对应方案数 先初始化所有的 cnt[i]为 1,因为背包里什么也不装也是一种方案 外层循环 n次,每次读入新物品的 v,w 求出装新物品时的总价值,与不装新物品时作对比 如果装新物品的方案总价值更大,那么用 f[j−v]+w来更新 f[j

ryontang的博客 672

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【动态规划】背包问题求方案数

经典算法之解决所有背包问题 求方案数问题 1、从前i个物品中选,且总体积不超过j的总方案数,初始化是f[0][i] = 1, 0 <= i <= m,其余是0 01 背包 例子:给你一堆物品,每个物品有一定的体积,每个物品只能选一个,求总体积不超过 m的方案数 输入 4 5 2 2 3 7 输出 7 二维代码 #include <bits/stdc++.h> using namespace std; const int N = 100; int f[N][N]; int

青年有志 1689

【题解-Acwing】11. 背包问题求方案数

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 最优选法的方案数。注意答案可能很大,请输出答案模。,用空格隔开,分别表示物品数量和背包容积。每件物品只能使用一次。输出一个整数,表示 方案数 模。,用空格隔开,分别表示第。件物品的体积和价值。

写代码的犄角旮瘩 998

acwing背包问题求方案数

有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出。注意答案可能很大,请输出答案模 109+7109+7 的结果。

2302_79431881的博客 428

背包问题汇总2(分组背包,背包问题求方案数)

分组背包问题 背包问题上加一层循环就可以了,最外层控制第几组,最内层循环依此遍历第i组所有物品的信息。 样例题目: 有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行有两个整数 ...

就是氧气的博客 723

[01背包] 背包问题求方案数(01背包+求方案数+思维)

文章目录0. 前言1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 强相关: [01背包] 背包问题求具体方案(01背包+求方案数+思维) 1. 01背包+求方案数+思维 11. 背包问题求方案数 本问题和 [01背包] 背包问题求具体方案(01背包+求方案数+思维) 求方案数不同。上个问题是求一条具体的最短路状态转移方案即可,因为会对字典序排序,所以当时我们采用了贪心的策略,当两个状态相等时,选小不选大。而本问题,这两个状态相等时,就把这两个都选上就行了。

Y-puyu 的博客 2107
上一篇: 匈牙利算法、二分图的最大匹配数
下一篇: 最小路径重复点覆盖(沃舍尔算法,匈牙利算法)
liamaking
博客等级 码龄7年 97粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值