数位DP
LowestJN
强省弱OIer
展开
-
[BZOJ3679][数位DP]数字之积
学一发数位DP 如果直接记录乘积的话有10910^9的情况,但是因为每一位只有1~9,所以最后乘积只有2 3 5 7的质因数,那么把在第i为放0~9转化成放入多少个2 3 5 7 f(i,c2,c3,c5,c7,j)f(i,c2,c3,c5,c7,j)表示转移到从高到低的第i位,因数2的个数为c2,3的个数为c3,5的个数为c5,7的个数为c7,j表示到i位的数字是否等于R的,然后转移一下 就好原创 2017-04-12 08:59:04 · 793 阅读 · 0 评论 -
[数位DP] BZOJ1190. [HNOI2007]梦幻岛宝珠
x是a*2^b的形式,而且a很小那么就考虑二进制下DP每个数就对2^b以后的数位有影响,那么在二进制中每一位做一次01背包就好了。#include <cstdio> #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N=110;typedef long long ll;in原创 2017-09-15 20:45:06 · 421 阅读 · 0 评论 -
[数位DP] HDU4507 吉哥系列故事——恨7不成妻
另 fi,j,k,sf_{i,j,k,s} 表示DP了前i位,数位和%7的余数为j,前i位的数字%7余数为k,前s位是否与上限相同 的方案数。 gi,j,k,sg_{i,j,k,s}一样,但表示的是所有情况的平方和。 hi,j,k,sh_{i,j,k,s}表示所有情况的和三个数组同时转移就可以了。#include <cstdio> #include <iostream> #include <al原创 2017-09-02 09:30:36 · 327 阅读 · 0 评论 -
[数位DP] Codeforces 809C. Find a car
要先找规律啊… 位置 (x,y)(x,y) 的数是 (x−1)⊕(y−1)+1(x-1)\oplus(y-1)+1,⊕\oplus 表示异或那么答案就是求∑x≤x1,y≤y1((x−1)⊕(y−1)+1)[(x−1)⊕(y−1)+1≤k]\sum_{x\le x1,y\le y1} ((x-1)\oplus(y-1)+1)[(x-1)\oplus(y-1)+1\le k]在二进制下x,y,k三个限原创 2017-09-02 09:35:05 · 642 阅读 · 0 评论 -
[数位DP AC自动机] Codeforces 434C. Tachibana Kanade's Tofu
数位DP 匹配要用AC自动机,转移的时候要记录一下当前在哪个节点上。#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <queue>using namespace std;const int P=1e9+7;int n,m,li,tot,x,y; int l[210],r[2原创 2017-09-02 09:38:27 · 574 阅读 · 0 评论 -
[数位DP 多重背包计数] BZOJ5003. 与链
每一位二进制分开考虑那么在一个合法的序列中,一定是前面几个数当前二进制位是1,其他都是0数位DP,每一位的1最多出现k次,这就是一个多重背包多重背包转移用前缀和优化就好了O(nlogn)O(n\log n)#include <cstdio> #include <iostream> #include <algorithm>using namespace std;const int N=100010,P原创 2017-11-26 11:02:49 · 575 阅读 · 0 评论 -
[数位DP] 【UNR #2】梦中的题面
当 c=1c=1c=1 的时候,很容易想到转成 bbb 进制 每一位独立考虑,就可以数位DP了 当 c=0c=0c=0 的时候,再加一维表示之前满足 xi=bixi=bix_i=b^i 的个数就可以了 #include <cstdio> #include <iostream> #include <algorithm> #include <cst...原创 2018-03-14 10:04:26 · 699 阅读 · 0 评论