分组背包和完全背包

news/2025/3/13 11:26:21/文章来源:https://www.cnblogs.com/yaoguyuan/p/18769568

[Algo] 分组背包和完全背包

1. 分组背包模板

// 1. 分组背包模板
// https://www.luogu.com.cn/problem/P1757
int maxValue(vector<vector<int>> &arr, int n, int m)
{// arr[i][0] - 重量, arr[i][1] - 价值, arr[i][2] - 组号// 先按照组号排序sort(arr.begin(), arr.end(), [](const vector<int> &a, const vector<int> &b) { return a[2] < b[2]; });int k = arr[n - 1][2];vector<vector<int>> dp(k + 1, vector<int>(m + 1));// dp[i][j]: 1...i组每组至多选一个物品且容量不超过j时能够获得的最大价值for (int i = 1, start = 0, end = 1; i <= k; i++){// 当前来到第i组while (end < n && arr[end][2] == arr[start][2]) end++;// 第i组所有物品下标范围start...end - 1for (int j = 0; j <= m; j++){dp[i][j] = dp[i - 1][j];for (int k = start; k < end; k++)if (j >= arr[k][0]) dp[i][j] = max(dp[i][j], dp[i - 1][j - arr[k][0]] + arr[k][1]);}start = end++;}return dp[k][m];
}

2. 从栈中取出K个硬币的最大面值和

// 2. 从栈中取出K个硬币的最大面值和
// https://leetcode.cn/problems/maximum-value-of-k-coins-from-piles/
int maxValueOfCoins(vector<vector<int>>& piles, int k) {vector<vector<int>> arr;int n = piles.size(), count = 0;for (int i = 0; i < n; i++){int group = i + 1, m = piles[i].size(), sum = 0;for (int j = 0; j < m; j++){sum += piles[i][j];vector<int> tmp(3);tmp[0] = j + 1;tmp[1] = sum;tmp[2] = group;arr.push_back(tmp);count++;}}return maxValue(arr, count, k);
}

3. 完全背包模板

// 3. 完全背包模板
// https://www.luogu.com.cn/problem/P1616
int maxValue_(vector<int> &w, vector<int> &v, int m)
{int n = w.size();vector<int> dp(m + 1);for (int i = 1; i <= n; i++)for (int j = w[i]; j <= m; j++) dp[j] = max(dp[j], dp[j - w[i]] + v[i]);return dp[m];
}

4. 正则表达式匹配

// 4. 正则表达式匹配
// https://leetcode.cn/problems/regular-expression-matching/description/
bool regexMatch(string &s, string &p, int i, int j, vector<vector<int>> &dp)
{if (dp[i][j] != 0) return dp[i][j] == 1;bool ans;int n = s.size(), m = p.size();// s已越界if (i == n){// (1)p也越界if (j == m) ans = true;// (2)p未越界else ans = j + 1 < m && p[j + 1] == '*' && regexMatch(s, p, i, j + 2, dp);}// s未越界,p已越界else if (j == m){ans = false;}// s与p都未越界else{// (1)p[j + 1]越界或非'*'if (j + 1 == m || p[j + 1] != '*') ans = (s[i] == p[j] || p[j] == '.') && regexMatch(s, p, i + 1, j + 1, dp);// (2)p[j + 1] == '*'else {bool p1 = regexMatch(s, p, i, j + 2, dp);bool p2 = (s[i] == p[j] || p[j] == '.') && regexMatch(s, p, i + 1, j, dp);ans = p1 | p2;}}dp[i][j] = ans == true ? 1 : 2;return ans;
}
bool isMatch(string s, string p) {vector<vector<int>> dp(s.size() + 1, vector<int>(p.size() + 1));return regexMatch(s, p, 0, 0, dp);
}

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

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

相关文章

Nexpose 7.10.0 发布,新增功能概览

Nexpose 7.10.0 发布,新增功能概览Nexpose 7.10.0 for Linux & Windows - 漏洞扫描 Rapid7 on-prem Vulnerability Management, released Mar 12, 2025 请访问原文链接:https://sysin.org/blog/nexpose-7/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgNe…

Jmeter插件管理器Plugins Managerjmeter1

Jmeter插件管理器Plugins Managerjmeter1.4打开报错解决办法 Jmeter插件管理器Plugins Manager下载插件打开报错解决办法 目录 [Jmeter插件管理器Plugins Manager下载插件打开报错解决办法](https://blog.csdn.net/u012106306/article/details/109067686#Jmeter插件管理器Plug…

仓库物料编码太乱?一文教你用WMS系统做好物料编码!

在仓库管理中,物料编码是一件看似简单,实则影响深远的事。编码乱,仓库乱;编码清晰,仓库高效! 很多企业的仓库管理都面临这些问题:同样的物料多个编码,库存数据对不上,仓库找货像大海捞针。 编码规则混乱,采购、仓库、生产、财务对不上账,沟通全靠吼。 人工录入出错,…

关于maven通过system方式内置jar的问题

今天部署遇到一个问题,华为openGuass数据库的postgresql.jar必须要放在maven的插件配置里,否则打出来的jar包启动无论如何都会报错 如上图,这三个jar都是通过system内嵌的maven依赖,在maven-jar-plugin的manifestEntries的Class-Path标签里必须要严格配置上,否则启动就会报…

向导新建一个wxWidgets程序

在CodeBolcks+wxWidgets下的C++编程教程——用向导创建一个wxWidgets项目(xTetris) - lexyao - 博客园 在CodeBolcks+wxWidgets+wxSmith下的C++编程教程——用向导创建一个wxWidgets项目(sTetris) - lexyao - 博客园 在CodeBolcks+Windows API下的C++编程教程——用向导创建…

CH9121default与classical设置方法

SYN发送间隔调整方法:网口连接设备后双击设备列表中要配置的设备在扩展参数中单击获取扩展参数,在超时处理模式选项选择Classical然后执行设置扩展参数,最后点击复位模块后生效(仅TCP CLIENT模式有效)Default与Classical切换如果需要使用Classical模式需要在端口设置波特率后…

10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

引言 ❝ 小编是一名10年+的.NET Coder,期间也写过Java、Python,从中深刻的认识到了软件开发与语言的无关性。现在小编已经脱离了一线开发岗位,在带领团队的过程中,发现了很多的问题,究其原因,更多的是开发思维的问题。所以小编通过总结自己过去十多年的软件开发经验,为年…

ChromeOS 134 版本更新

Chrome OS 134 版本更新ChromeOS 134 版本更新 一、ChromeOS 134 更新内容 1. ChromeOS 自助终端(Kiosk)模式支持隔离 Web 应用(Isolated Web Apps) 从 ChromeOS 134 开始,自助终端(Kiosk)模式支持 隔离 Web 应用(Isolated Web Apps,IWA),提供 更安全、更强大 的应用…

ChromeOS 133 版本更新

ChromeOS 133 版本更新 1. 增强托管用户的 Office 文件处理功能 从 ChromeOS 133 开始,托管用户 现在可以 无缝打开和编辑 Microsoft Office 文件(Word、PowerPoint、Excel),无论他们使用的是 Microsoft 365(Office for the web) 还是 Google Workspace。 1.1. 对不同用户…

搭建扫码挪车功能及源码分享

实现效果如图:首先要到这里去申请一个微信通知应用,有了这个应用才能接收到微信的通知: https://wxpusher.zjiecode.com/admin扫码注册后新建一个应用,你会获得一个appToken 再扫码就能获得你的UID(https://wxpusher.zjiecode.com/admin/main/wxuser/list 这个用户列表里面…

氛围灯系统(VALS)

随着汽车智能化、个性化、舒适性的需求逐年提高,汽车已不再只是简单的交通工具,而是一个能够为人们带来舒适与惬意的场所。高品质的汽车内饰照明在其中扮演了重要的角色,已成为汽车内饰领域中不可忽视的设计元素。氛围灯是一种应用在汽车内部,用于烘托车内环境氛围的内饰灯…

嘎嘎好用!推荐三款开源的 Redis 桌面客户端!

三款开源的 Redis 桌面客户端工具,开箱即用!大家好,我是 Java陈序员。 在日常开发中,经常会使用到 Redis, 为了更好的查看和操作 Redis 中的数据,通常会借助可视化操作客户端工具。 今天,给大家介绍三款开源的 Redis 桌面客户端工具,开箱即用!关注微信公众号:【Java陈…