分组背包问题笔记

分组背包是选不同的组,每个组中只能选一个物品。分组背包就是01背包的变种,多重背包就是特殊的分组背包。

//分组背包
#include<iostream>
using namespace std;
const int N = 110;
int f[N], v[N], w[N], n, m;int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m;for (int i = 0; i < n; ++i){int s; cin >> s;//初始化每组的数据for (int j = 0; j < s; ++j) cin >> v[j] >> w[j];for (int j = m; j >= 0; --j){for (int k = 0; k < s; ++k){//这里必须加上判断,因为这里j没有做限制if (j - v[k] >= 0) f[j] = max(f[j], f[j - v[k]] + w[k]);}}}cout << f[m];return 0;
}

 还有一种方法优化空间:就是将物品放在外层循环:

#include <bits/stdc++.h>using namespace std;const int M = 110;
int dp[M], last[M];
int N, V, S, v, w;int main()
{cin >> N >> V;for (int i = 0; i < N; i++){cin >> S;for (int j = 0; j < S; j++){cin >> v >> w;for (int k = V; k >= v; k--)dp[k] = max(dp[k], last[k - v] + w);}memcpy(last, dp, sizeof dp);}cout << dp[V] << endl;return 0;
}

每次last数组保存上一次的状态,每个物品都会更新一次f[0]到f[V],如果不记录上一次的状态,不需要加上if条件(循环k中已经加了限制了),就必须写成二维的数组了。这时就需要加上if条件了。优化掉的空间就是开数组的空间。

for(int i=1;i<=n;i++){int s;scanf("%d",&s);for(int k=1;k<=s;k++){//第i组第k个物品int a,b;scanf("%d%d",&a,&b);for(int j=v;j>=0;j--){f[i][j]=max(f[i][j],f[i-1][j]);if(j>=a) f[i][j]=max(f[i][j],f[i-1][j-a]+b);}}}

一维数组无法取得上一层的状态 。

 

 

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

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

相关文章

ShardingSphereJDBC简单入门

ShardingSphere 介绍ShardingSphere-JDBCSharding-Sphere-ProxyShardingSphere-Sidecar混合架构运行模式DistSQL可拔插架构ShardingSphere的发展路线 主从复制ShardingSphere-JDBC功能SQL解析SQL支持程度SQL稳定支持SQL实验性支持 MySQL不支持SQL清单分页 数据分片垂直分片水平…

飞天使-docker知识点9-dockerfile补充

文章目录 dockerfile.dockerignoreMAINTANIERFROMEXPOSEENVCMD dockerfile 里面的文件首字母必须大写 编译的文件必须放在当前目录&#xff0c;不能放在父目录文件配置好了之后&#xff0c;可以使用docker build 命令进行操作.dockerignore 在使用 Dockerfile 进行构建时&…

509.斐波那契数

题目描述 斐波那契数&#xff0c;通常用 F(n) 表示&#xff0c;形成的序列称为斐波那契数列。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n > 1。…

Python 爬虫开发完整环境部署,爬虫核心框架安装

Python 爬虫开发完整环境部署 前言&#xff1a; ​ 关于本篇笔记&#xff0c;参考书籍为 《Python 爬虫开发实战3 》 笔记做出来的一方原因是为了自己对 Python 爬虫加深认知&#xff0c;一方面也想为大家解决在爬虫技术区的一些问题&#xff0c;本篇文章所使用的环境为&#x…

关于Ubuntu22.04恢复误删文件的记录

挂载在Ubuntu22.04下的固态盘有文件被误删了&#xff0c;该固态盘是ntfs格式的。 在网上找了很多教程&#xff0c;最后决定用TestDisk工具进行恢复。 现记录如下&#xff1a; Ubuntu安装testdisk sudo apt-get install testdisk运行testdisk sudo testdisk得到 我选择的是…

Linux文件与目录管理

在Linux系统中&#xff0c;文件和目录是最基本的组织单位。了解如何有效地管理和操作文件和目录对于提高工作效率至关重要。本文将介绍Linux文件与目录管理的基本原理和常用命令&#xff0c;帮助读者掌握Linux系统的文件操作技巧。 一、文件与目录的基本概念 文件&#xff1a…

vue打包后el-image图片不出来

结论&#xff1a; publicPath:"/"解决&#xff0c;不能设置相对路径。 环境 可能相关的环境&#xff1a; vue-cli5.0vue3vue-router4 可能的原因 publicPath:“./”路由history路由base 现象 图片异常 img部分图片被转换成了base64可以出来style里url("~…

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译 1、下载Jetson BSP包和交叉编译环境 地址&#xff1a;https://developer.nvidia.com/embedded/jetson-linux-archive下载需要版本即可&#xff0c;此次编译采用32.4.2版本 需要下载的文件如下&#xff1a; 2、新建一个文件…

React 列表和键

React 列表和键 大家好&#xff0c;在这一课中&#xff0c;我们将学习如何在 React 中创建和渲染列表。我们还将学习如何使用键来优化列表的性能。 创建列表 我们可以使用 JavaScript 的 map() 方法来创建列表。 const numbers [1, 2, 3, 4, 5]; const listItems numbers…

算法:对称二叉树

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、问题描述 二、递归算法 三、字符串判断法 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、问题描述 有一棵二叉树&#xff0…

LeetCode(66)二叉树的最大深度【二叉树】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 二叉树的最大深度 1.题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7]…

js获取对象数组中重复项的个数并排序,js数组对象筛选出重复数据 并计算 重复了几次

js数组对象筛选出重复数据 并计算 重复了几次 例如&#xff1a; 把以下数据 let arr [{kuaidizhandian:顺丰快递},{kuaidizhandian:邮政快递},{kuaidizhandian:顺丰快递} ]转换为 kuaidarr [{kuaidizhandian:顺丰快递,num&#xff1a;2},{kuaidizhandian:邮政快递,num&…

显示所有已连接的网络连接信息

ECHO OFF & setlocal enabledelayedexpansion TITLE 显示所有已连接的网络连接信息 mode con: cols80 lines30 CALL :get_NIC_info pause>nul EXIT /B 0:get_NIC_info SET "_i_0"ECHO 所有已连接的网络连接信息&#xff08;未插网线不会显示在下方&#xff09…

Python类调用实例方法

在 Python 的类体中定义的方法默认都是实例方法&#xff0c;通过对象来调用实例方法。 但要提醒大家的是&#xff0c;Python 的类在很大程度上是一个命名空间&#xff0c;当程序在类体中定义变量、方法时&#xff0c;与前面介绍的定义变量、定义函数其实并没有太大的不同。对比…

解析神器Xpath详解+实战

解析神器Xpath详解实战 有同学说&#xff0c;我正则用的不好&#xff0c;处理HTML文档很累&#xff0c;有没有其他的方法&#xff1f; 有&#xff01;那就是XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 目标&am…

微信小程序怎样给事件传值的

微信小程序怎样给事件传值的&#xff1f; 通过自定义属性传值通过事件对象传值 通过自定义属性传值 通过自定义属性传值&#xff1a; 在触发事件的组件上&#xff0c;可以通过自定义属性将需要传递的值绑定到事件对象上。在事件处理函数中&#xff0c;通过event.currentTarget.…

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串 解法1 拼接字符串-掐头去尾后判断是否含有原字符串解法2 KMP——重复子串的最小单位是这个字符串里的最长相等前后缀所不包含的子串解法3 暴力解法KMP ---------------&#x1f388;&#x1f388;题目链接&…

【C++11特性篇】一文助小白轻松理解 C++中的【左值&左值引用】【右值&右值引用】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【左值&#xff06;左值引用】&…

C#中简单的继承和多态

今天我们来聊一聊继承&#xff0c;说实话今天也是我第一次接触。 继承的概念是什么呢&#xff1f;就是一个类可以继承另一个类的属性和方法&#xff08;成员&#xff09; 继承是面向对象编程中的一个非常重要的特性。 好了&#xff0c;废话不多说&#xff0c;下面切入正题&a…

微信小程序使用camera扫码获取相机权限

确保用户隐私指引已经明确使用相机功能 “mp-weixin”: "permission": {"scope.camera": {"desc": "需要使用相机功能&#xff0c;请授权"}}wx.authorize({scope: scope.camera,success(res) {console.log(res, 用户成功授权)// 用户…