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

背包问题求方案数(AcWing)(JAVA)

有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。

第 i 件物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。

输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+7109+7 的结果。

输入格式:

第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。

接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。

输出格式:

输出一个整数,表示 方案数 模 109+7109+7 的结果。

数据范围:

0<N,V≤1000
0<vi,wi≤1000

输入样例:

4 5

1 2

2 4

3 4

4 6

输出样例:

2

解题思路: 题目是基于01背包的基础上进行扩展。核心还是01背包思路,01背包的核心就是由初始条件递推下一个状态的最优解,并记录。再由记录的最优解,递推下一个状态的最优解,层层递进。而本题是求最优选法方案数,实质上也是一样由初始条件递推并记录最优解,并层层递进。

值得注意的是:本题求最优选法的方案数。所以选不选这个方案和这个方案所对应背包装入价值有关,即选择装入最大价值的方案。【注意:两种方案(即不装第i件物品与装入第i件物品)价值相等,说明两种方案都可以,要相加。】

此外如果数据比较大,且大于等于10^9 + 7的话,可以 mod 10^9  + 7。

(如果还是觉得有些许疑虑,还是强烈建议用输入样例将01背包的运行原理手动运行一下,深究其规律,可能会有质的飞跃。)

理论成立代码如下(朴素法,容易理解):

import java.util.*;public class Main {public static int N = 1010;public static int mod = (int)(1e9 + 7);public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int v[] = new int[N];int w[] = new int[N];for(int i = 1;i <= n; i ++) {v[i] = sc.nextInt();w[i] = sc.nextInt();}int count[][] = new int[n + 10][m + 10];//记录方案数int f[][] = new int[n + 10][m + 10];for(int i = 0; i <= m; i ++) count[0][i] = 1;//什么也不装也是一种装法。count[i][0]会被自动迭代成1,不必担心for(int i = 1; i <= n; i ++)for(int j = 0; j <= m; j ++) {if(j < v[i]) {count[i][j] = count[i - 1][j];//装不了,和前i-1的装法一样f[i][j] = f[i - 1][j];}else {if(f[i - 1][j - v[i]] + w[i] > f[i - 1][j])count[i][j] = count[i - 1][j - v[i]];else if(f[i - 1][j - v[i]] + w[i] == f[i - 1][j])count[i][j] = count[i - 1][j - v[i]] + count[i - 1][j];//两种方案都最优秀,最佳方案数要相加elsecount[i][j] = count[i - 1][j];//不相等选价值最大的f[i][j] = Math.max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);}if(count[i][j] >= mod)count[i][j] = count[i][j] % mod;}System.out.print(count[n][m]);}
}

相关文章:

背包问题求方案数(AcWing)(JAVA)

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

一篇文章带你读懂HashMap

HashMap是面试中经常问到的一个知识点,也是判断一个候选人基础是否扎实的标准之一。可见HashMap的掌握是多重要。 一、HashMap源码分析 1、构造函数 让我们先从构造函数说起&#xff0c;HashMap有四个构造方法&#xff0c;别慌 1.1 HashMap() // 1.无参构造方法、// 构造一…...

Java如何进行优雅的判空——Optional类的灵活应用

0 引言 在Java Web项目开发中&#xff0c;经常令人头疼的NPE问题&#xff08;NullPointerException&#xff09;——空指针&#xff0c;例如我们在调用equal()方法时&#xff0c;就经常会出现NPE问题&#xff1a; String str null; str.equals("fsfs")&#xff1b;…...

Fluent Python 笔记 第 12 章 继承的优缺点

重点是说明对 Python 而言尤为重要的两个细节: 子类化内置类型的缺点多重继承和方法解析顺序 12.1 子类化内置类型很麻烦 内置类型(使用 C 语言编写)不会调用用户定义的类覆盖的特殊方法。 不要子类化内置类型&#xff0c;用户自己定义的类应 该继承 collections 模块(http…...

Go语言读取解析yml文件,快速转换yml到go struct

YAML (YAML Aint a Markup Language)是一种标记语言&#xff0c;通常以.yml为后缀的文件&#xff0c;是一种直观的能够被计算机程序识别的数据序列化格式&#xff0c;并且容易被人类阅读&#xff0c;容易和脚本语言交互的&#xff0c;可以被支持YAML库的不同的编程语言程序导入…...

第二十六章 java并发常见知识内容(ThreadLocal 详解)

JAVA重要知识点带着疑问看ThreadLocalGC 之后 key 是否为 null&#xff1f;ThreadLocalMap Hash 算法ThreadLocalMap Hash 冲突ThreadLocalMap.set()方法ThreadLocalMap过期 key 的探测式清理流程ThreadLocalMap扩容机制ThreadLocalMap.get()详解ThreadLocalMap过期 key 的启发…...

人类的第一语言是什么

其实机器智能始终存在一个争议 没有人类的肢体和感受器无法理解和感同身受 这不用想是自然&#xff0c;但是可以通过虚拟数据进行模拟&#xff0c;深度学习便是 深度学习是模拟简单输入输出的最好选择&#xff0c;但不是开放性的学习 没有智能交互的智能永远不是智能 就像狼孩一…...

jsp(全部知识点)

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…...

测试开发面试基础题

1.对测试开发的理解 测试开发首先离不开测试&#xff0c;而软件测试是指&#xff0c;在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。 而且&#xff0c;现在不仅仅是通过手工测试来发…...

C++——多态|虚函数|重写|虚表

文章目录1. 多态的概念1.1 概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写虚函数重写的三个例外&#xff1a;2.4 普通调用和多态调用&#xff1a;2.5 C11 override 和 final2.6 重载、虚函数的覆盖(重写)、隐藏(重定义)的对比3. 抽象类(有关纯虚函数)3.1 …...

IPV4地址详解

文章目录IPV4地址分类编址划分子网无分类编制CIDR路由聚合应用规划&#xff08;子网划分的细节&#xff09;定长的子网掩码FLSM变长的子网掩码VLSMIPV4地址 IPV4地址就是给因特网&#xff08;Internet&#xff09;上的每一台主机&#xff08;或路由器&#xff09;的每一个接口…...

(一)初识Streamlit(附安装)

本入门指南介绍Streamlit的工作原理、如何在您首选的操作系统上安装Streamlit&#xff0c;以及如何创建第一个Streamlit应用程序&#xff01; 1 安装 1.1 先决条件 Python 3.7 – Python 3.11 **注&#xff1a;我这里使用的是anaconda的虚拟环境&#xff0c;用pycharm编写代…...

【新】华为OD机试 - 斗地主 2(Python)| 刷完获取OD招聘渠道

斗地主 2 题目描述 在斗地主扑克牌游戏中,扑克牌由小到大的顺序为3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有,单张,对子,顺子,飞机,炸弹等 其中顺子的出牌规则为,由至少 5 张由小到大连续递增的扑克牌组成 且不能包含2 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,1…...

秒杀项目之消息推送

目录一、创建消费者二、创建订单链路配置2.1 定义RabbitMQ配置类2.2 创建RabbitmqOrderConfig配置类三、如何实现RabbitMQ重复投递机制3.1 开启发送者消息确认模式3.2 消费发送确认3.2.1 创建ConfirmCallBack确认模式3.2.2 创建ReturnCallBack退回模式3.3 创建生产者3.4 创建消…...

【重磅】IEEE33配电网两阶段鲁棒优化调度CCG

目录 1 前言 2基本内容 2.1 配网两阶段鲁棒模型 2.2 求解步骤 3部分程序 4程序结果 5程序链接 1 前言 鲁棒优化是电力系统研究的热点&#xff0c;而两阶段鲁棒和分布鲁棒研究就成为各类期刊&#xff08;sci/ei/核心&#xff09;的宠儿&#xff0c;最简单的思路是通过改…...

GPT2代码拆解+生成实例

本文代码来自博客&#xff0c;GPT2模型解析参考 import torch import copy import torch.nn as nn import torch.nn.functional as F from torch.nn.modules import ModuleList from torch.nn.modules.normalization import LayerNorm import numpy as np import os from tqd…...

基于android的即时通讯APP 聊天APP

基于android的即时通讯APP 或者 聊天APP 一 项目概述 该项目是基于Android 的聊天APP系统&#xff0c;该APP包含前台&#xff0c;后台管理系统&#xff0c;前台包含用户通讯录,用户详情&#xff0c;用户聊天服务&#xff0c;用户二维码,发现功能,发现详情 , 个人中心, 个人信…...

【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历

如有错误&#xff0c;欢迎指正。 如有不理解的地方&#xff0c;可以私信问我。 文章目录题目1&#xff1a;根据二叉树创建字符串题目实例思路与解析代码实现题目2&#xff1a;二叉树的层序遍历题目思路与解析代码实现题目1&#xff1a;根据二叉树创建字符串 点击进入题目链接—…...

MySQL数据库调优————SQL性能分析

TIPS 本文基于MySQL 8.0 本文探讨如何深入SQL内部&#xff0c;去分析其性能&#xff0c;包括了三种方式&#xff1a; SHOW PROFILEINFORMATION_SCHEMA.PROFILINGPERFORMANCE_SCHEMA SHOW PROFILE SHOW PROFILE是MySQL的一个性能分析命令&#xff0c;可以跟踪SQL各种资源消耗。…...

sql数据库高级编程总结(一)

1、数学函数&#xff1a;操作一个数据&#xff0c;返回一个结果 &#xff08;1&#xff09;取上限 ceiling 如果有一个小数就取大于它的一个最小整数 列如9.5 就会取到 10 select code,name,ceiling(price) from car &#xff08;2&#xff09;取下限 floor 如果有一个小数就…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...