区间dp2

news/2025/3/17 12:27:07/文章来源:https://www.cnblogs.com/yaoguyuan/p/18776633

[Algo] 区间dp2

1. 合唱队

// 1. 合唱队
// https://www.luogu.com.cn/problem/P3205
struct CountStruct
{int cntLeft = 0;int cntRight = 0;
};
int compute(vector<int> &h)
{int n = h.size();vector<vector<CountStruct>> dp(n, vector<CountStruct>(n));for (int i = 0; i < n - 1; i++){if (h[i] < h[i + 1]){dp[i][i + 1].cntLeft = 1;dp[i][i + 1].cntRight = 1;}}for (int l = n - 3; l >= 0; l--)for (int r = l + 2; r < n; r++){CountStruct tmp = dp[l + 1][r];int a = tmp.cntLeft, b = tmp.cntRight;tmp= dp[l][r - 1];int c = tmp.cntLeft, d = tmp.cntRight;int cntL = 0, cntR = 0;if (h[l] < h[l + 1]) cntL = (cntL + a) % MOD;if (h[l] < h[r]) cntL = (cntL + b) % MOD;if (h[r] > h[l]) cntR = (cntR + c) % MOD;if (h[r] > h[r - 1]) cntR = (cntR + d) % MOD;dp[l][r].cntLeft = cntL;dp[l][r].cntRight = cntR; }return (dp[0][n - 1].cntLeft + dp[0][n - 1].cntRight) % MOD;
}

2. 移除盒子

// 2. 移除盒子
// https://leetcode.cn/problems/remove-boxes/
int removeBoxes(vector<int>& boxes) {int n = boxes.size();vector<vector<vector<int>>> dp(n, vector<vector<int>>(n, vector<int>(n, 0)));return func(boxes, 0, n - 1, 0, dp);
}
// boxes[l....r]范围上要去消除,前面跟着k个连续的和boxes[l]颜色一样的盒子
// 这种情况下,返回最大得分
int func(vector<int>& boxes, int l, int r, int k, vector<vector<vector<int>>>& dp) {if (l > r) {return 0;}if (dp[l][r][k] > 0) {return dp[l][r][k];}int s = l;while (s + 1 <= r && boxes[s + 1] == boxes[l]) {s++;}int cnt = k + (s - l + 1);// 可能性1 : 前缀先消int ans = cnt * cnt + func(boxes, s + 1, r, 0, dp);// 可能性2 : 讨论前缀跟着哪个后,一起消掉for (int m = s + 2; m <= r; m++) {if (boxes[m] == boxes[l] && boxes[m - 1] != boxes[m]) {// boxes[l] == boxes[m]是必须条件// boxes[m - 1] != boxes[m]是剪枝条件,避免不必要的调用ans = max(ans, func(boxes, s + 1, m - 1, 0, dp) + func(boxes, m, r, cnt, dp));}}dp[l][r][k] = ans;return ans;
}

3. 统计不同回文子序列

// 3. 统计不同回文子序列
// https://leetcode.cn/problems/count-different-palindromic-subsequences/description/
int countPalindromicSubsequences(string str) {const int mod = 1000000007;int n = str.size();vector<int> last(256, -1);vector<int> left(n), right(n);// left[i] : i位置的左边和s[i]字符相等且最近的位置在哪,不存在就是-1for (int i = 0; i < n; i++) {left[i] = last[str[i]];last[str[i]] = i;}// right[i] : i位置的右边和s[i]字符相等且最近的位置在哪,不存在就是nfill(last.begin(), last.end(), n);for (int i = n - 1; i >= 0; i--) {right[i] = last[str[i]];last[str[i]] = i;}// dp[i][j] : i...j范围上有多少不同的回文子序列// 如果i>j,那么认为是无效范围dp[i][j] = 0vector<vector<long>> dp(n, vector<long>(n, 0));for (int i = 0; i < n; i++) {dp[i][i] = 1;}for (int i = n - 2; i >= 0; i--) {for (int j = i + 1; j < n; j++) {if (str[i] != str[j]) {dp[i][j] = dp[i][j - 1] + dp[i + 1][j] - dp[i + 1][j - 1] + mod;} else {int l = right[i];int r = left[j];if (l > r) {// i...j的内部没有s[i]字符dp[i][j] = dp[i + 1][j - 1] * 2 + 2;} else if (l == r) {// i...j的内部有且仅有一个s[i]字符dp[i][j] = dp[i + 1][j - 1] * 2 + 1;} else {// i...j的内部至少有两个s[i]字符dp[i][j] = dp[i + 1][j - 1] * 2 - dp[l + 1][r - 1] + mod;}}dp[i][j] %= mod;}}return (int)dp[0][n - 1];
}

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

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

相关文章

AMBA总线学习(二)---AHB-Lite

AHB-Lite的硬件架构可以分为四部分,分别是Master、Slave、Decoder、MUX。 Maeter信号:Name Destination DescriptionHADDR[31:0] slave和decoder 32bit的地址总线(不是严格限制为32bit)HBURST[2:0] slave 突发传输类型HMASTERLOCK slave 用来实现原子操作的HPROT[3:0] slav…

可视化图解算法:判断链表中是否有环(环形链表)

判断链表是否存在环有个**小技巧**:**快慢指针法**。定义2个指针变量(即快慢指针),初始化时快慢指针都指向头节点,每次快指针每次移动 2 个节点,慢指针每次移动 1 个节点。如果 快指针指向的节点为null或者快指针指向节点的下一个节点为空,则链表没有环;如果快慢指针相…

新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载

《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》电子书正式上线!多种精选 AI 部署方案带你深入了解 Serverless+AI 最新趋势、AI 应用的架构设计与详细的部署教程等。函数计算 AI 技术解决方案助您一键上云,高效部署。《零门槛AIGC应用实战——Serverless+AI …

linux中安装intel wifi ax101驱动

目录前奏安装在Ubuntu中FAQ 资料参考 获取帮助 前奏 rambo@ub24-1:~$ cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.1 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.1 LTS (Noble Numbat)" ........rambo@ub24-1:~$ cat…

桌面级CPU、显卡天梯图

手动更新,收藏所有(来源:秋刀鱼半藏)《史上最全桌面级CPU天梯图》专用更新帖(公测版) 版本:V6.077,时间:2024.11 《史上最全桌面级显卡天梯图》专用更新帖(公测版) 更新时间:2025.03.06

Qwen2-VL华为卡300i duo环境搭建推理测试

引子 前面也写过华为300i duo DeepSeek的环境搭建&推理测试,感兴趣的同事请移步(https://blog.csdn.net/zzq1989_/article/details/146149684?spm=1001.2014.3001.5501)。多模态华为卡的适配倒是一直没有出过相关的博客。刚好遇到需要Qwen2-VL的配置,安装。OK, 那就让…

EWM528-2G4NW20SX系列LORA MESH无线组网模块深度测评

1.LORA MESH模块产品简介 EWM528-2G4NW20SX、EWM528-2G4NW27SX系列LORA MESH无线组网模块基于先进的无线通信技术打造。在输出功率方面,LORA MESH模块能提供稳定且适配多种场景的功率支持,保障信号的有效传输范围。空中速率表现出色,可满足大量数据快速传输的需求,提升工作…

SQLService 导入excel数据生成一个数据表

SQLService 导入excel数据生成一个数据表 1、先选择导入的数据库右键任务=》选择导入数据 2、选择导入的数据源excel 3、选择excel的的地址和格式。 如果不知道格式的可以excel、另存改格式。 4、选择选择OLE DB Provider ,点击 下一步(Next) 5、选择默认下一步。 6、勾选 源…

20242935 2024-2025-2 《网络攻防实践》第三周作业

20242935 2024-2025-2 《网络攻防实践》第三周作业 网络嗅探与协议分析 一、实验要求 (1)动手实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探,回答问题:你在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什…

ASE40N30-ASEMI电源管理专用ASE40N30

ASE40N30-ASEMI电源管理专用ASE40N30编辑:LL ASE40N30-ASEMI电源管理专用ASE40N30 型号:ASE40N30 品牌:ASEMI 封装:TO-220F 最大漏源电流:40A 漏源击穿电压:300V 批号:最新 RDS(ON)Max:12mΩ 引脚数量:3 沟道类型:N沟道MOS管 封装尺寸:如图 特性:MOS管、N沟道MO…

FANUC机器人维修SRVO-050报警代码诠析

仔细查阅发那科机器人所提供的故障原因及其相应的FANUC机器人维修处理措施,并逐条进行深入剖析。机器人发出碰撞报警,通常可以归结为以下六种情形。即机器人确实发生了碰撞,因此触发了报警机制。这一问题多发生在机器人的初期调试阶段,往往是由于调试人员对于空间概念的把…

京准电钟:高精度北斗卫星对时装置电力系统改造方案

京准电钟:高精度北斗卫星对时装置电力系统改造方案京准电钟:高精度北斗卫星对时装置电力系统改造方案 京准电钟:高精度北斗卫星对时装置电力系统改造方案 京准电钟官微——ahjzsz随着电力系统对时间同步精度、安全性和自主可控需求的提升,北斗卫星授时技术逐渐替代GPS成为主…