
数位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 · 184 阅读 · 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 · 147 阅读 · 0 评论 -
【数位dp】题目汇总
P2657 [SCOI2009] windy 数 模板 HDU 2089 不要62 模板 P2602 [ZJOI2010]数字计数 多了一个枚举0-9每个数字 P3413 SAC#1 - 萌数 回文串考虑+特殊读入 HDU 4705 恨7不成妻 平方和的计算原创 2020-07-21 11:39:19 · 185 阅读 · 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 · 128 阅读 · 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 · 200 阅读 · 0 评论 -
【数位dp】P3413 SAC#1 - 萌数
考虑到长度为2的回文串可能为aa,aba这两种情况,我们可以采取正难反解的方法,首先算出所有方案数字的和,然后减去不存在长度大于等于2的回文串的数字的个数,就是答案实现统计不存在长度大于等于2的回文串的操作,在dfs时,要记录当前位前两位数分别是多少,然后再枚举这一位时,选择不能构成回文串(长度大于等于2)的数字,最后统计方案数这道题由于输入很大,long long也不够,所以采取了直接读字符串,这样就无法进行-1的操作,所以要进行一下特判,如果那个数满足条件,就需要额外-1代码#i.原创 2020-07-21 11:20:50 · 212 阅读 · 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=0op=1表示之前的数字和所给数字完全一样,也就是达到上香,这一位只能选0-这一位,当选原数字上的这个数时,op=1当选其他数字时,op就可以为0了op=2 表示前原创 2020-07-20 16:08:08 · 159 阅读 · 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 · 195 阅读 · 0 评论