3. 完全背包问题(acwing)

文章目录

  • 3. 完全背包问题
    • 题目描述
    • 动态规划
      • 一维数组

3. 完全背包问题

题目描述

有 N种物品和一个容量是 V的背包,每种物品都有无限件可用。

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

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

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

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

输出格式
输出一个整数,表示最大价值。

数据范围
0<N,V≤1000

0<vi,wi≤1000
输入样例

4 5
1 2
2 4
3 4
4 5

输出样例:

10

动态规划

一维数组

这段代码演示了如何解决一个经典的动态规划问题,即完全背包问题。注释已经添加在代码的相应部分,以便详细解释每一步。

#include<bits/stdc++.h> // 引入所有标准库
using namespace std;int main()
{int n,v; // n 表示物品种数,v 表示背包容量cin>>n>>v; // 输入物品种数和背包容量vector<int> val(n+1,0),w(n+1,0); // val 存放物品价值,w 存放物品体积vector<int> dp(v+1,0); // dp 数组,用于存放每个容量下的最大价值for(int i=0;i<n;i++)cin>>w[i]>>val[i]; // 输入每种物品的体积和价值// 动态规划过程for(int i=0;i<n;i++) // 遍历所有物品{// 完全背包的特点是,每种物品可以选无限次,所以内循环正序遍历for(int j=w[i];j<=v;j++) // 对于每个容量,从当前物品的体积开始遍历到背包容量{// 状态转移方程,尝试将当前物品加入背包,并更新最大价值dp[j]=max(dp[j],dp[j-w[i]]+val[i]);}}// 输出最大价值,即背包容量为v时的最大价值cout<<dp[v];return 0;
}

在这个代码中,dp[j] 表示的是背包容量为j的情况下能够装入物品的最大价值。在内循环中,我们尝试将每件物品加入背包中,并更新dp[j]为当前dp[j]dp[j-w[i]]+val[i]中的较大值,其中dp[j-w[i]]+val[i]代表在背包中已经装有一定体积物品的情况下再加入当前考虑的物品所能达到的价值。

完全背包问题与0-1背包问题的重要区别在于:完全背包问题中的每种物品可以选取无限次,而0-1背包问题中每种物品只能选取一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity进阶之路(1)回顾与思考

首先呢&#xff0c;博主在这里先反思一下自己这几个月&#xff0c;其实并没有多少进步。 在寒假中&#xff0c;博主几乎是独立编写了一个小程序的完整UI和一个Uniapp的雏形。那段时间是博主生产力最高的时间段。几乎是每天8点起来开始编写代码&#xff0c;晚上一直忙到很晚。 …

互联网轻量级框架整合之Spring框架II

持久层框架 Hibernate 假设有个数据表&#xff0c;它有3个字段分别是id、rolename、note, 首先用IDEA构建一个maven项目Archetype选择org.apache.maven.archetypes:maven-archetype-quickstart即可&#xff0c;配置如下pom <project xmlns"http://maven.apache.org/…

软考 系统架构设计师系列知识点之云原生架构设计理论与实践(13)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之云原生架构设计理论与实践&#xff08;12&#xff09; 所属章节&#xff1a; 第14章. 云原生架构设计理论与实践 第3节 云原生架构相关技术 14.3.2 云原生微服务 1. 微服务发展背景 过去开发一个后端应用最为直接的方…

CCF-CSP认证考试 202212-5 星际网络 52/68分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202212-5 星际网络 时间限制&#xff1a; 5.0s 内存限制&#xff1a; 512.0MB 问题描述 23333 23333 23333 年&#xff0c;在经过长时间的建设后&#xff0c;一个庞大的星际网络…

深入解析:如何使用Xcode上传苹果IPA安装包至App Store?

目录 引言 摘要 第二步&#xff1a;打开appuploader工具 第二步&#xff1a;打开appuploader工具&#xff0c;第二步&#xff1a;打开appuploader工具 第五步&#xff1a;交付应用程序&#xff0c;在iTunes Connect中查看应用程序 总结 引言 在将应用程序上架到苹果应用商…

蓝桥杯-网络安全比赛(4)基础学习-JavaScript同步与异步、宏任务(MacroTask)与微任务、事件循环机制(MicroTask)

理解JavaScript的异步编程模型对于编写高效、健壮的Web应用程序至关重要。 在Web开发中&#xff0c;经常需要处理异步操作&#xff0c;如网络请求、定时器、文件读写等。 掌握同步和异步的概念&#xff0c;以及宏任务和微任务的处理顺序&#xff0c;可以帮助开发者更好地管理代…

洛谷B3735题解

题目描述 圣诞树共有 n 层&#xff0c;从上向下数第 1 层有 1 个星星、第 2 层有 2 个星星、以此类推&#xff0c;排列成下图所示的形状。 星星和星星之间用绳子连接。第 1,2,⋯,n−1 层的每个星星都向下一层最近的两个星星连一段绳子&#xff0c;最后一层的相邻星星之间连一段…

【linux】join命令

join命令用于将两个文件中&#xff0c;指定栏位内容相同的行连接起来。 找出两个文件中&#xff0c;指定栏位内容相同的行&#xff0c;并加以合并&#xff0c;再输出到标准输出设备。 命令的参数如下&#xff1a; -a1或者-a2表示先输出合并后相同部分内容&#xff0c;然后再输…

No supported authentication methods available (server sent: publickey)

先说折腾方式&#xff1a;以下修改ssh配置以后旧的ssh连接不要断开&#xff0c;重启ssh服务以后都用新连接去测试&#xff0c;万一有问题的话旧的ssh连接不会断开还可以继续修改配置文件&#xff0c;要不都断了就惨了。 ubuntu server 22&#xff0c;使用秘钥方式可以正常登录…

发明专利申请条件

1、新颖性&#xff1a;是指在申请日以前没有同样的发明或者实用新型在国内外出版物上公开发表过&#xff0c;没有在国内公开使用过或者以其他方式为公众所知&#xff0c;也没有同样的发明或者实用新型由他人向国家专利行政部门提出过申请并且记载在申请日以后公布的专利申请文件…

什么是json?json可以存放哪几种数据类型

JSON指的是JavaScript对象表示法(avaScript Object Notation)&#xff0c;是轻量级的文本数据交换格式&#xff0c;独立于语言: JSON使用JavaScript语法来描述数据对象&#xff0c;但是JSON仍然独立于语言和平台&#xff0c;JSON解析器和JSON库支持许多不同的编程语言&#xff…

Python学习从0到1 day20 第二阶段 面向对象 ③ 继承

循此苦旅&#xff0c;以达天际 —— 24.4.3 一、继承的基础语法 学习目标&#xff1a; ① 理解继承的概念 ② 掌握继承的使用方式 ③ 掌握pass关键字的作用 单继承 语法&#xff1a; class 类名(父类名): 类内容体 继承分为&#xff1a;单继承和多继承 继承表示&#xff1a;将从…

WE博客代码系统

WE博客代码系统 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net mvc架构和sql server数据库&#xff0c;并采用EF实体模型开发。 三层架构并采用EF实体模型开发 功能模块&#xff1a; WE博客代码系统 WE博客代码系…

Vue指令之v-model

调了半天没反应&#xff0c;结果是没引用Vue&#xff0c;我是伞兵。 v-model的作用是将视图与数据双向绑定。一般情况下&#xff0c;Vue是数据驱动的&#xff0c;即数据发生改变后网页就会刷新一次&#xff0c;更改对应的网页内容&#xff0c;即数据单向绑定了网页内容。而使用…

每日一题————P5725 【深基4.习8】求三角形

题目&#xff1a; 题目乍一看非常的简单&#xff0c;属于初学者都会的问题——————————但是实际上呢&#xff0c;有一些小小的坑在里面。 就是三角形的打印。 平常我们在写代码的时候&#xff0c;遇到打印三角形的题&#xff0c;一般简简单单两个for循环搞定 #inclu…

【C++第三阶段】模板类模板通用数组实现案例

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 模板怎么使用模板函数模板注意事项普通函数与函数模板的区别普通函数与函数模板调用规则函数模板限制 类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函…

MySQL日志探索——redo log和bin log的刷盘时机详解

我们先简单了解一下大致的刷盘时机&#xff0c;然后配合两阶段提交和组提交来看 redo log的刷盘时机 MySQL 正常关闭时&#xff1b;当 redo log buffer 中记录的写入量大于 redo log buffer内存空间的一半时&#xff0c;会触发落盘&#xff1b; PS&#xff1a;为什么这里要到…

Google Chrome 常用设置

Google Chrome 常用设置 References 转至网页顶部 快捷键&#xff1a;Home 转至内容设置 chrome://settings/content 清除浏览数据 历史记录 -> 清除浏览数据 关于 Chrome 设置 -> 关于 Chrome chrome://settings/help References [1] Yongqiang Cheng, https:/…

关于ansible的模块 ③

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 接《关于Ansible的模块①》和《关于Ansible的模块②》&#xff0c;继续学习ansible的user模块。 user模块可以增、删、改linux远…

回溯算法|491.递增子序列

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {result.push_back(path);// 注意这里不要加return&#xff0c;要取树上…