news 2025/12/27 11:42:01

数位dp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数位dp

lc1012
参数设计(数位DP递归函数 f )
- i :当前处理的数位下标(从0开始,到数字长度 m 结束),控制遍历进度。


- mask :10位二进制数,标记已用数字(第d位为1表示数字d已用),防重复。


- is_limit :布尔值,标记当前数位是否受 n 对应位限制(true则最多填 n 当前位数字,false可填0-9),确保不超n。


- is_num :布尔值,标记是否已组成合法数字(false可跳过当前位,true需枚举有效数字),处理前导零。


- 记忆化 memo[i][mask] :缓存无限制、已组成合法数字时,第i位+已用数字为mask的无重复数个数,减重复计算。

class Solution {
public:
int numDupDigitsAtMostN(int n) {
auto s = to_string(n);
int m = s.length(), memo[m][1 << 10];
memset(memo, -1, sizeof(memo)); // -1 表示没有计算过


function<int(int, int, bool, bool)> f = [&](int i, int mask, bool is_limit, bool is_num) -> int {
if (i == m)
return is_num; // is_num 为 true 表示得到了一个合法数字
if (!is_limit && is_num && memo[i][mask] != -1)
return memo[i][mask];
int res = 0;
if (!is_num) // 可以跳过当前数位
res = f(i + 1, mask, false, false);
int up = is_limit ? s[i] - '0' : 9; // 如果前面填的数字都和 n 的一样,那么这一位至多填数字 s[i](否则就超过 n 啦)
for (int d = 1 - is_num; d <= up; ++d) // 枚举要填入的数字 d
if ((mask >> d & 1) == 0) // d 不在 mask 中
res += f(i + 1, mask | (1 << d), is_limit && d == up, true);
if (!is_limit && is_num)
memo[i][mask] = res; // 记忆化搜索
return res;
};
return n - f(0, 0, true, false);
}
};

lc1147

递归迭代的写

return 2 + longestDecomposition(s.substr(i, n - i * 2));

class Solution {
public:
int longestDecomposition(string s) {
if (s.empty())
return 0;
for (int i = 1, n = s.length(); i <= n / 2; ++i) // 枚举前后缀长度
if (s.substr(0, i) == s.substr(n - i)) // 立刻分割
return 2 + longestDecomposition(s.substr(i, n - i * 2));
return 1; // 无法分割
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/26 1:41:47

Wan2.2-T2V-A14B模型在图书馆数字资源导览中的应用探索

Wan2.2-T2V-A14B模型在图书馆数字资源导览中的应用探索 在数字化浪潮席卷公共文化服务的今天&#xff0c;一个现实问题愈发凸显&#xff1a;我们已经完成了大量古籍扫描、元数据标注和数据库建设&#xff0c;但这些“沉睡”的数字资源&#xff0c;对大多数普通读者而言依然遥远…

作者头像 李华
网站建设 2025/12/25 19:50:55

10分钟掌握AMD Ryzen处理器深度调试:SMUDebugTool完全指南

想要深入了解AMD Ryzen处理器的底层工作原理吗&#xff1f;SMUDebugTool作为一款专业的硬件调试工具&#xff0c;为开发者和硬件爱好者提供了直接访问处理器核心的能力。这款AMD Ryzen调试工具能够让你实时监控SMU状态、分析PCI配置空间&#xff0c;并实现精确的性能调优控制。…

作者头像 李华
网站建设 2025/12/26 12:12:29

深度解析城通网盘直连技术:高效下载的终极方案

深度解析城通网盘直连技术&#xff1a;高效下载的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在当今数字化时代&#xff0c;城通网盘作为国内领先的文件分享平台&#xff0c;其下载体验却常…

作者头像 李华
网站建设 2025/12/27 10:02:53

Venera漫画阅读器:从零开始的终极配置手册

Venera漫画阅读器&#xff1a;从零开始的终极配置手册 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 还在为找不到好用的漫画阅读器而烦恼吗&#xff1f;Venera漫画阅读器为您提供全平台覆盖的完美解决方案。这款开源应用不…

作者头像 李华
网站建设 2025/12/27 7:50:58

第11.4节 混合储能系统能量管理

第11.4节 混合储能系统能量管理 11.4.1 多时间尺度能量管理策略 混合储能系统(HESS)的能量管理策略(EMS)是其实现技术经济性优势的智能中枢。该策略的核心任务是根据外部功率需求Pdemand(t)P_{demand}(t)P

作者头像 李华
网站建设 2025/12/18 10:39:03

实时视频生成革命:LightX2V开源技术栈如何重塑创作生态

实时视频生成革命&#xff1a;LightX2V开源技术栈如何重塑创作生态 【免费下载链接】Autoencoders 项目地址: https://ai.gitcode.com/hf_mirrors/lightx2v/Autoencoders 2024年以来&#xff0c;开源社区掀起了一场视频生成技术的颠覆性变革——由LightX2V项目主导的4步…

作者头像 李华