每日热讯!数位DP?记忆化罢了!

我看了半天的数位 DP,DP 没学会,人倒是麻了。

解决什么

一般用于求解给你一个区间 \([l,r]\),问你其中满足条件的数有多少个。

这种题目还是蛮常见的,我们一般情况下暴力只能拿一少部分分,之前我看着那个 \(n\le 10^{18}\) 是一脸懵逼,这东西 \(O(n)\) 都过不去,啥高级的东西能 A 啊。


【资料图】

然后就有了今天让我麻了的数位 DP。

思想

题目中给的让我们难以下手,我们不如转化一下:求 \([1,r]\) 中符合限制的数并减去 \([1,l-1]\) 的数。

这样就好处理多了,当然也可以从 \(0\) 开始,根据题目而定。

然后我们把要求的 \([1,x]\) 区间中的 \(x\) 给一位一位分解开,然后 dfs 往里面填数。

在分解的时候,我们用一个数组 \(a[i]\) 来存储从高位到低位(一般是)的数字,来当作填数的限制。

我们在 dfs 的时候,传的参数至少是包含 pos当前填到第几个数以及 limit也就是当前点是否有限制,如果有的话,我们在后面遍历当前点填的数的时候直接调用之前的 \(a[]\) 数组就好了。

当然我们在 dfs 的时候是要记忆化的,不然复杂度直接飙升,我们可以根据题目给的限制条件来把状态相同的归到一类然后存放到数组里面,然后我们就可以在遇到与当前状态相同的时候直接调用记忆化数组来让我们的复杂度变得美丽。

遍历每一个数的时候一般分为两种情况,一个有前导零,一个没有前导零。

P2602 [ZJOI2010] 数字计数

code:

#include #define int long long#define N 20using namespace std;int a[N], cnt, f[N][N << 3][2][2], dight; inline int dfs(int p, int cntd, int lead, int limit)//p是当前位置,cntd是当前答案lead是有没有前导零。limit是当前数字枚举到的数量上限 {if(p == cnt) return cntd;//到了就直接返回搜到的值 if(f[p][cntd][lead][limit] != -1) return f[p][cntd][lead][limit];//记忆化,以前搜过了就直接返回 int ans = 0;//统计答案 for(int v = 0; v <= (limit ? a[p] : 9); v ++)//枚举当前点可以是哪些数字 {if(lead && v == 0)//如果要是当前点有前导零,并且当前的点的下一个枚举的是0 ans += dfs(p + 1, cntd, 1, limit && v == a[p]);//答案累加,计算当前状态下的答案标记有前导零 elseans += dfs(p + 1, cntd + (v == dight), 0, limit && v == a[p]);//正常情况 }return f[p][cntd][lead][limit] = ans;//返回答案的同时记忆化 }inline int fx(int x){cnt = 0;memset(f, -1 , sizeof f);memset(a, 0, sizeof a);//清空数组 while(x) a[cnt ++] = x % 10, x /= 10;//由低位到高位 reverse(a, a + cnt);//反转一下让他顺序变正常 return dfs(0, 0, 1, 1);//开始搜索 前面有0并且第一个数是有限制的 }signed main(){int L, R;cin >> L >> R;for(int i = 0; i <= 9; i ++)//枚举九个数字 {dight = i;//更新dight的值 cout << fx(R) - fx(L - 1) << " ";//跑一遍输出当前数字出现的次数 }return 0;}

和前面讲的一样,利用记忆化搜索,注释应该很清楚了吧。

P8764 [蓝桥杯 2021 国 BC] 二进制问题

数位 DP 板子题。

我们设 \(f_{i,j}\) 为当前从左往右枚举到第 \(i\) 个数没有枚举时,当前枚举完的 \(1\) 的个数为 \(j\) 时的能得到的有 \(k\) 个 \(1\) 的个数。

我们用 ?来表示当前点没有填入,假设我们现在从左往右填,当前的状态是 10101?????,我们 dfs 完以后,直接存入 \(f_{6,3}\) 里,我们要是再枚举到类似 10011?????这种的,我们可以发现,后面问号的可能性是一样的,也就是说,他们得到的答案是一样的,那么我们就可以进行记忆化了。

我们对于给定的 \(n\) 按照其他的数位 DP 一样拆成二进制下的数,将每一位都存放到 \(a_{i}\) 里,也就是说 \(a_{i}\) 表示从左往右第 \(i\) 个数可以填 \(1\sim a_{i}\)。

由于这里的情况很少,只有 \(0\) 和 \(1\),所以可以直接展开循环。

code:

#include #define int long long#define N 100using namespace std;int n, k, a[N], f[N][N];//枚举到第i个数当前当前j个1的个数 inline int dfs(int p, int limit, int cnt){if( cnt > k ) return 0;if(! p) return (cnt == k ? 1 : 0);if(! limit && f[p][cnt] != -1) return f[p][cnt];int res = 0, flag = (limit ? a[p] : 1);res += dfs(p - 1, limit && flag == 0, cnt);if(flag) res += dfs(p - 1, limit && flag == 1, cnt + 1);if (! limit) f[p][cnt] = res;return res;}inline int fx(int x){memset(f, -1, sizeof f);int len = 0;while(x) a[++ len] = (x & 1), x >>= 1;return dfs(len, 1, 0);}signed main(){cin >> n >> k;cout << fx(n) << endl;return 0;}

关键词:

各行业工资单出炉!IT类最赚钱,还有这些钱景喜人

  中新经纬11月24日电 (张澍楠)虽说三百六十行,行行出状元,但行业之间的差距,仍然很大。究竟什么行业“最香”?被视为“高富帅”的金

2021-11-24

“狗咬人”事件当事人被撤职 多名干部被问责

  新华社郑州11月23日电(记者冯大鹏)在“狗咬人”舆情发酵后,23日晚,河南安阳通报了对涉“狗咬人”事件责任单位和责任人的处理决定。 

2021-11-24

北京朝阳区来广营华贸城7号院6号楼解除管控

  11月23日晚,朝阳区来广营地区清苑路第五社区华贸城7号院6号楼正式解除管控。  11月23日,华贸城7号院6号楼583户管控居民进行了第四

2021-11-24

大连市将4个中风险地区调整为低风险地区

  11月23日大连市新冠肺炎疫情防控总指挥部发布,大连市严格落实新冠肺炎疫情防控各项措施,至2021年11月23日24时,大连市庄河市城关街道

2021-11-24

云南哀牢山4名遇难地质队员遗体已移交其所在单位

  根据云南省普洱市哀牢山 "11·15 "联合指挥部通报,2021年11月23日21时50分,4名遇难人员遗体已移交其所在单位。 【编辑:叶攀】

2021-11-24

宁夏10年为农村创业妇女发放创业担保贷款超138亿元

  中新网银川11月23日电 (李佩珊 姚舒玲)“在宁夏,每6个农村妇女中就有1个接受过创业担保贷款项目的资金支持。”11月23日,宁夏妇联党

2021-11-24

大连全面开展疫情溯源溯责工作 已对涉事企业和相关单位立案调查

  中新网大连11月23日电(记者 杨毅)大连市政府秘书长衣庆焘23日在大连疫情防控工作新闻发布会上通报称,大连市已全面展开本轮疫情的溯源

2021-11-24

各行业工资单出炉!IT类最赚钱,还有这些钱景喜人

  中新经纬11月24日电 (张澍楠)虽说三百六十行,行行出状元,但行业之间的差距,仍然很大。究竟什么行业“最香”?被视为“高富帅”的金

2021-11-24

“狗咬人”事件当事人被撤职 多名干部被问责

  新华社郑州11月23日电(记者冯大鹏)在“狗咬人”舆情发酵后,23日晚,河南安阳通报了对涉“狗咬人”事件责任单位和责任人的处理决定。 

2021-11-24

云南哀牢山4名遇难地质队员遗体已移交其所在单位

  根据云南省普洱市哀牢山 "11·15 "联合指挥部通报,2021年11月23日21时50分,4名遇难人员遗体已移交其所在单位。 【编辑:叶攀】

2021-11-24

宁夏10年为农村创业妇女发放创业担保贷款超138亿元

  中新网银川11月23日电 (李佩珊 姚舒玲)“在宁夏,每6个农村妇女中就有1个接受过创业担保贷款项目的资金支持。”11月23日,宁夏妇联党

2021-11-24

第三届拉萨市旅游行业服务技能大赛决赛举行

  中新网拉萨11月23日电 (记者 冉文娟)第三届拉萨市旅游行业服务技能大赛决赛11月23日精彩举行。百余名选手经过层层选拔,经历初赛、网

2021-11-24

聚焦解决人兽冲突 东北虎豹国家公园启动专项行动

  中新网长春11月23日电 (郭佳 吴林锡)东北虎豹国家公园23日全面启动2021-2022年今冬明春清山清套·打击乱捕滥猎专项行动。该行动旨在

2021-11-24

呼吸治疗专家浦其斌逝世 曾多次参与公共卫生事件救治

2021-11-24
x 广告
x 广告
x 广告

Copyright   2015-2022 热讯仓储网版权所有  备案号:豫ICP备20005723号-6   联系邮箱:29 59 11 57 8@qq.com