动态规划——数位dp
quan_tum
这个作者很懒,什么都没留下…
展开
-
P2518 [HAOI2010]计数
挺裸的数位dp(虽然我并不会)贴一下这里 这其实是一道全排列的题,求排列比给出的数小的数量。那些000数量比当前数小的可以视为把000放到了最前面。#include<bits/stdc++.h>#define ll long longusing namespace std;ll CC[1005][1005],ans;int a[15],b[55],n;char c;...原创 2018-08-27 17:38:33 · 239 阅读 · 0 评论 -
[bzoj3679]数字之积
很容易看出来是数位dp 我们可以发现个位数字乘积的取值并没有特别多,于是可以通过质因数只有2,3,5,72,3,5,7{2,3,5,7}的性质预处理出每种乘积,可以用map存起来。#include<bits/stdc++.h>#define ll long longusing namespace std;int p[4]={2,3,5,7};map<int,int&...原创 2018-08-28 09:09:46 · 185 阅读 · 0 评论 -
loj#10167不要 62
一道简单的数位dp题,想法和我做的loj10166差不多。 dfs中lll表示位数,sxsxsx表示前一位是否为666,ooo表示是否前几位都取到最大。#include<bits/stdc++.h>#define il inlineusing namespace std;#define getchar()(p1==p2&&(p2=(p1=buf)+fread...原创 2018-08-28 10:09:44 · 119 阅读 · 0 评论 -
[BZOJ1833][ZJOI2010]数字计数
一道比较简单的数位dp题,记录每个数字出现个数。 把表示每个数字的那一维放到结构体里面了,方便一点。#include<bits/stdc++.h>#define ll long long#define il inline char sr[1<<21],z[20];int C=-1,Z;il void Ot(){fwrite(sr,1,C+1,stdout),C...原创 2018-08-28 13:20:26 · 127 阅读 · 0 评论 -
loj#10168恨 7 不成妻
这一题的题目描述很…无法描述,但还是能马上看出是一道数位dp题。限制的条件有点多,细节处理起来确实很烦。只要记录合法的数的个数,数的和以及数的平方和。#include<bits/stdc++.h>#define ll long long#define il inlineusing namespace std;const int mo=1e9+7;#define getch...原创 2018-08-28 13:43:55 · 312 阅读 · 0 评论 -
loj#10163Amount of Degrees
求区间转化为bbb进制111的个数为kkk的数的个数。 主要思路就是依靠二进制来做,可以转化为一颗二叉树,这里写得很详细。 先预处理高度为iii的完全二叉树内二进制表示中恰好含有jjj个111的数的个数。这很容易用递推求出:设f[i,j]f[i,j]f[i,j]表示所求,则统计其左右子树内符合条件数的个数,即f[i,j]=f[i−1,j]+f[i−1,j−1]f[i,j]=f[i−1,j]+f...原创 2018-08-28 15:37:29 · 135 阅读 · 0 评论 -
[AHOI2009]同类分布
数位dp。记录前面的数字和,枚举模数,f[l][s][m]f[l][s][m]f[l][s][m]表示到第i位,前面数字总和为sss,%m%m\%m的余数为momomo.#include<bits/stdc++.h>#define ll long longusing namespace std;ll f[21][201][201],c[21],a,b,m;inline ll...原创 2018-08-29 08:29:10 · 291 阅读 · 0 评论 -
[SCOI2013]数数
这题不是很懂,要看详细的到这里 这题很明显是数位dp,数组的第二维都是表示之前几位是否达到最大值。 注意前导零…#include<bits/stdc++.h>#define ll long long#define il inlineusing namespace std;const int N=100005,mo=20130427;#define getchar()(...原创 2018-08-29 15:23:50 · 279 阅读 · 0 评论 -
[SDOI2010]代码拍卖会
因为每位上的数字是不严格递增的,所以我们可以把这个数横着分割,分割为几个111,111111,111111111,111...111111111...111111111...111111的形式。因为每一位上的最大数字为999,所以我们做多需要999个这样的数就可以拼成原数。 横着割,把所有模ppp同余的看成一类,总共只有ppp个数(因为000,111,111111,111111111这样下去模p...原创 2018-08-29 16:32:50 · 350 阅读 · 0 评论