![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位dp
andyc_03
这个作者很懒,什么都没留下…
展开
-
【数位dp】P4999 烦人的数学作业
数位dp的基础题,复习模板用!! 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; ll f[20][200],a[20]; ll dfs(int x,int sum,int top) { if(!x) return sum; if(!top && f[x][sum]>=0) return f[x][sum]; i...原创 2021-01-14 00:18:47 · 130 阅读 · 1 评论 -
【数位dp】LibreOJ - 10166数字游戏
记录一个mod表示除以N的余数,当cnt=0时,若mod为0即能整除,返回1 #include<bits/stdc++.h> using namespace std; long long a,b; int num[20],cnt; long long dp[15][105]; int N; long long ddp(int cnt,int mod ,bool limit) { if(!cnt) { if(!mod) return 1; return 0; } if(.原创 2020-07-21 11:52:43 · 124 阅读 · 0 评论 -
【数位dp】题目汇总
P2657 [SCOI2009] windy 数 模板 HDU 2089 不要62 模板 P2602 [ZJOI2010]数字计数 多了一个枚举0-9每个数字 P3413 SAC#1 - 萌数 回文串考虑+特殊读入 HDU 4705 恨7不成妻 平方和的计算原创 2020-07-21 11:39:19 · 161 阅读 · 0 评论 -
【数位dp】HDU 2089 不要62
需要记前一位是否为6,如果为6,当前为位不能选2 每一位也都不能选4 剩下的就是模板了 #include<bits/stdc++.h> using namespace std; long long a,b; int num[20],cnt; long long dp[15][2]; long long ddp(int cnt,bool pre ,bool limit) { if(!cnt) return 1; if(!limit && dp[cnt][pre]!.原创 2020-07-21 11:35:25 · 100 阅读 · 0 评论 -
【数位dp】【Hdu】4705 恨7不成妻
这道题目有三个要求 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍; 这三个实现起来难度不大,只需要存一个mod1表示各位数字之和除以7的余数,mod2表示数字除以7的余数 而这道题要求输出平方和 所以就需要考虑枚举当前第cnt位时,它对平方和的贡献为多少; 对于数字ABCD #include<bits/stdc++.h> using namespace std; const int mod=1e9+7; int t,c.原创 2020-07-21 11:30:02 · 158 阅读 · 0 评论 -
【数位dp】P3413 SAC#1 - 萌数
考虑到长度为2的回文串可能为aa,aba这两种情况,我们可以采取正难反解的方法,首先算出所有方案数字的和,然后减去不存在长度大于等于2的回文串的数字的个数,就是答案 实现统计不存在长度大于等于2的回文串的操作,在dfs时,要记录当前位前两位数分别是多少,然后再枚举这一位时,选择不能构成回文串(长度大于等于2)的数字,最后统计方案数 这道题由于输入很大,long long也不够,所以采取了直接读字符串,这样就无法进行-1的操作,所以要进行一下特判,如果那个数满足条件,就需要额外-1 代码 #i.原创 2020-07-21 11:20:50 · 167 阅读 · 0 评论 -
【数位dp】 P2657 [SCOI2009] windy 数
数位dp: dp[i][op][v]表示第i位上的数字为v,并且状态是op 所以小于等于n的满足条件的数量为ans=dp[位数][2][0]+dp[位数][0][0-最高位上的数字-1]+dp[位数][1][最好位上的数字] 其中op=0表示之前的数字没有和所给数字完全一样,也就是没有到上限,因此,这一位选0-9都可以,且op=0 op=1表示之前的数字和所给数字完全一样,也就是达到上香,这一位只能选0-这一位,当选原数字上的这个数时,op=1 当选其他数字时,op就可以为0了 op=2 表示前原创 2020-07-20 16:08:08 · 130 阅读 · 0 评论 -
【数位dp】P2602 [ZJOI2010]数字计数
与P2657 [SCOI2009] windy 数类似,都是通过枚举每一位上的数,这道题dp表示的是当前的数中含有数字dig的个数。 这次的代码在枚举过程中,参考了位运算的写法,更加简洁 #include<bits/stdc++.h> using namespace std; long long a,b; long long dp[25][25][2][2]; int num[25]; long long ddp(int cnt,bool limit,bool lead,int di.原创 2020-07-21 00:23:12 · 148 阅读 · 0 评论