![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位dp
lixuwei2333
这个作者很懒,什么都没留下…
展开
-
吉哥系列故事——恨7不成妻(数位dp,求符合条件数的平方和)
(solve(r)+mod-solve(l-1))%mod输出时因为求区间值的mod,所以一定要注意防止出现负数 题目链接#include <bits/stdc++.h>#define LL long longusing namespace std;const int mod = 1e9+7;int a[20],len;LL w[20];struct node{...原创 2018-05-17 21:48:42 · 254 阅读 · 0 评论 -
POJ - 1426 Find The Multiple(数位dp,输出符合要求的某个结果)
题目链接 题目大意:找一个大于等于N的数,使这个数每一位只有0和1,且能被N整除。Sample Input 2 6 19 0Sample Output 10 100100100100100100 111111111111111111数位dp记录不可行路径#include <iostream>#include <...原创 2018-07-28 11:26:19 · 162 阅读 · 0 评论 -
Flags (方格染色问题)
题目链接 0表示白 1表示红 2表示蓝#include <bits/stdc++.h>#define ll long longusing namespace std;ll dp[50][40],n;ll dfs(int pos,int state){ if(pos==0) return 1; if(dp[pos][state]!=-1) return ...原创 2018-07-31 19:43:14 · 889 阅读 · 1 评论 -
数位dp总结
到这里,数位dp就告一段落了,kuangbin的专题还差一道,那一道涉及到了ac自动机,目前还不可做。 简单写下数位dp的总结基础部分数位dp有它固定的模板,例如solve,dfs函数的大体写法,和limit的处理。唯一不同的地方就是前缀状态state的维护,最为详细的state记法就是把前面所选择的每一个数都记录下来(即前缀prev),那么这就成了纯粹的暴力。 所以,根据题目...原创 2018-05-28 21:06:13 · 311 阅读 · 0 评论 -
XHXJ's LIS (数位dp,bitset状态压缩)
题目链接 题目大意:给出L和R找出在[L,R]中满足最长递增子序列长度等于K的个数。 思路: 本来想的是维护一个num[10],num[i]表示以i结尾的lis的长度,0<=num[i]<=9。然后状态压缩的时候发现压缩后太大,看了题解之后知道,必须要用nlogn求lis的思路来做,因为nlogn的思路是维护一个长度为10的bool数组,压缩后状态数少很多。#include ...原创 2018-05-28 20:41:45 · 739 阅读 · 0 评论 -
Balanced Number(数位dp,枚举平衡点)
题目链接 大意:平衡数有平衡点,使平衡点两边的权值(数值)×权重(到平衡点的距离)和相等对于任意一个平衡数,它的平衡点唯一 枚举平衡点统计平衡数的个数注意0的情况,0有一个平衡点,但是00有两个平衡点,000有三个平衡点#include <bits/stdc++.h>#define ll long longusing namespace std;ll dp[20]...原创 2018-05-26 16:15:35 · 431 阅读 · 3 评论 -
Round Numbers(数位dp,前导0)
题目链接 题目大意:要求二进制中0的个数大于等于1#include <bits/stdc++.h>#define ll long longusing namespace std;int len,dig[40];ll dp[40][100];ll dfs(int pos,int state,bool zero,bool limit){ if(pos==0){...原创 2018-05-25 20:18:33 · 818 阅读 · 0 评论 -
Balanced Numbers(数位dp,前导0,状态压缩)
题目链接 题目大意:要求每个奇数出现的次数为偶数,每个偶数出现的次数为奇数状态压缩,一个长度为10的3进制数。 第i位上为0,表示i没出现过,为1表示i出现奇数次,为2表示i出现偶数次。 change函数进行状态转移int change(int state,int pos){ int data=0; if(state==0) data = 0; else da...原创 2018-05-25 20:01:30 · 627 阅读 · 0 评论 -
hdu 4734 F(x) 数位DP
题目链接 简单的数位dp#include <bits/stdc++.h>#define LL long longusing namespace std;const int mod = 1e9+7;int dp[11][20000];int a[110];int len,maxx;int dfs(int pos,int prev,bool limit){ in...原创 2018-05-15 17:01:14 · 78 阅读 · 0 评论 -
B-number (数位dp入门)
题目链接n中存在“13”且n%13==0 注意参数ok的状态转移#include <bits/stdc++.h>#define ll long longusing namespace std;const int mod = 13;int len,dig[20];ll dp[20][20][2][20];ll dfs(int pos,int prev,int ok,...原创 2018-05-21 21:12:25 · 1285 阅读 · 0 评论 -
Bomb(入门数位dp)
题目链接一开始理解错题意了,以为4949对答案的贡献为2,所以dfs里有个sum参数#include <bits/stdc++.h>#define ll long longusing namespace std;int len,dig[20];ll dp[20][20][20];ll dfs(int pos,int prev,int sum,bool limit){...原创 2018-05-21 20:57:58 · 433 阅读 · 0 评论 -
Beautiful numbers(数位dp)
题目链接 假设m有k个因子a1,a2,a3…ak 显然n%m%ai = n%ai#include <bits/stdc++.h>#define ll long longusing namespace std;int len,dig[20];const int mod = 2520;ll dp[19][2621][50];map<int,int>h;se...原创 2018-05-21 20:25:56 · 230 阅读 · 0 评论 -
不要62(数位dp)
不要62LL dfs(int pos,int prev,bool limit){ int i; if(pos==0) return 1; if(!limit&&dp[pos][prev]!=-1) return dp[pos][prev]; int up; LL ans=0; up = limit?a[pos]:9; ...原创 2018-05-14 20:29:35 · 117 阅读 · 0 评论 -
Gym - 101653R(数位dp)
题目链接 简单的数位dp入门 要求每一位都要不小于前一位核心代码如下:LL dfs(int pos,int prev,bool limit){ int i; if(pos==len) return 1; if(!limit&amp;&amp;dp[pos][prev]!=-1) return dp[pos][prev]; int up; LL a...原创 2018-05-14 20:11:01 · 199 阅读 · 0 评论 -
Just Too Lucky(一个数能被其各位的和整除)
题目链接https://vjudge.net/problem/Gym-100623J题目大意:求1-n中,有多少个数,可以被其各位的和整除n<=1e12 设x为数位和x的范围为[1,108]也就是说要让一个数n mod x = 0 枚举x,然后数位dp当实际的数位和sum 和 枚举的x相等,且余数为0时,合法#include <bits/s...原创 2018-10-05 20:22:26 · 429 阅读 · 0 评论