
数位dp
a1s4z5
这个作者很懒,什么都没留下…
展开
-
hdu 3652 B-number
又是一个数位dp入门题,求1到n中含有13作为子串而且能被13整除的数的个数具体见代码吧#include#include#includeusing namespace std;const int maxn = 15;int dp[maxn][maxn][maxn][maxn];int dig[maxn];int dfs(int pos,int pre,in原创 2016-03-19 11:08:26 · 397 阅读 · 0 评论 -
Poj 3208 Apocalypse Someday
求第nn小的数位中含有三个连续的6的数。考虑小于xx的数位中含有连续三个6的数的个数,可以数位dp。状态为之前连续的6的个数,如果已经有三个6了,无论加什么数字都是合法状态,否则加一个不为6的数就重置个数为0。然后二分就好了#include<cstdio>#include<cstring>using namespace std;#define LL long long const int ma原创 2016-10-19 17:12:10 · 422 阅读 · 0 评论 -
Hdu 5456 Matches Puzzle Game
问有多少个等式满足使用的火柴棍个数恰好为nn个输出等式个数(modm)\pmod{m}5≤n≤500,3≤m≤2×1095\le n \le 500,3 \le m \le 2\times 10^9就是求满足a+b=ca + b = c,并且a,b,ca,b,c每一位按照使用的火柴棍个数加权之后恰好等于n−3n-3的等式个数考虑到这个题的状态和之前使用了多少位无关并且保证剩下的火柴棍是单调递减的可以原创 2016-10-06 17:20:36 · 552 阅读 · 0 评论 -
Hdu 5921 Binary Indexed Tree
题解链接题意搬运: 用树状数组维护一个序列,在给区间 [l,r][l,r] 加上一个tt的时候,要给 [1,r][1,r]加上 tt,给 [1,l−1][1,l−1] 减去 tt,两次操作后值真正发生变化的节点个数就是这一次区间修改的代价,现在要修改每一个[1,n][1,n]的子区间,求总代价对 109+710^9+7取模后的结果。题解搬运 记cnticnt_i表示ii的二进制表达式中11原创 2016-10-05 21:53:14 · 1566 阅读 · 0 评论 -
Hdu 4507 吉哥系列故事——恨7不成妻
Hdu 4507 吉哥系列故事——恨7不成妻求[L,R][L,R]中不满足以下任意一条的数的平方和1 整数中某一位是72 整数的每一位加起来的和是7的整数倍3 这个整数是7的整数倍;一眼看去又是一个数位dp,但是怎么统计平方和呢?假设我们在统计最高位为x的n个数的平方和有∑i=1n(x+a)2=n×x2+2x×∑i=1nai+∑i=1na2i\sum\limits_{i=1}^n ( x + a )原创 2016-10-09 10:15:56 · 354 阅读 · 0 评论 -
Codeforces 55D - Beautiful numbers
统计[L,R][L,R]内能被自己每一非零位整除的数的个数。一眼数位dp考虑到LCM(1,2...9)=2520LCM(1,2...9) = 2520可以用前缀mod2520和前缀非0数的LCM做为状态注意到由1到9组成的lcm其实是很稀疏的,可以离散化一下。具体就见代码吧。#include<bits/stdc++.h>using namespace std;const int maxn = 20原创 2016-10-12 17:57:21 · 350 阅读 · 0 评论 -
Bzoj 3530 数数
求[1,n](n≤101000)[1,n](n\le 10^{1000})中不包含给定数字作为字串的数字个数(mod109+7)\pmod{10^9+7},给定数字总长度≤1500\le 1500。一眼看过去是一个用AC自动机表示状态,用数位dp的模板题注意前导零是不会被统计到的具体见代码#include<bits/stdc++.h>using namespace std;const int ma原创 2016-10-11 16:54:04 · 317 阅读 · 0 评论 -
Lonlife 1016 Change of Life
定义f(x)f(x)为LIS(a0,a1...am)(n=a0+a1×10+...+am×10m,0≤ai≤9,am≠0)LIS(a_0,a_1...a_m)(n = a_0 + a_1\times 10+...+a_m\times 10^m,0\le a_i\le 9,a_m\neq 0)求∑ni=1f(i)\sum_{i=1}^nf(i)1≤n≤10151 \le n \le 10^{15}一眼原创 2016-10-09 09:56:36 · 309 阅读 · 0 评论 -
Ural 1081 Binary Lexicographic Sequence
数位dp+二分找出第k个二进制表示中没有相邻的1的数看起来很不好做是不是,但是作为数位dp,我们还是可以处理小于x的二进制表示没有相邻1的数个数这部分还是挺简单的?然后我们就可以二分去找答案了~感觉这个都是套路,还是见代码吧o(` • ~ • ′。)o #include<bits/stdc++.h>using namespace std;#define LL long longconst in原创 2016-05-23 17:24:11 · 321 阅读 · 0 评论 -
bzoj 4513 储能表
一句话题面∑x=0n−1∑y=0m−1min(x⊕y−k,0)(modp)\sum\limits_{x=0}^{n-1}\sum\limits_{y=0}^{m-1}min(x\oplus y-k,0) \pmod{p}好的题面就到这里数位dp一下就好记忆话搜索的时候其实用不着很多的分类讨论,具体的看代码吧#include<bits/stdc++.h>using namespace std;#de原创 2016-05-07 23:08:05 · 1393 阅读 · 0 评论 -
HDU 4734 F(x)
一个简单的数位dp这题的时间卡的有点紧,因为T比较大刚开始每组输入都重新计算dp数组,然后喜闻乐见的T了好久重新设计状态让计算出来的dp数组和A无关,这样就可以多次利用了 #include<bits/stdc++.h>using namespace std;#define LL long longconst int maxn = 20;int tw[maxn],num[maxn];int dp原创 2016-05-07 10:43:42 · 400 阅读 · 0 评论 -
UVa 11361 Investigating Div-Sum Property
一个不错的数位dp入门题求区间[a,b][a,b]中满足各个数位之和是k的倍数且这个数本身也是k的倍数的数的个数 数据范围 : 1≤a,b≤231,1≤k≤100001\leq a,b\leq 2^{31},1\leq k \leq 10000一个不错的数位dp入门题感觉这题如果要想清楚的话,还是要明确的定义一下dp的状态 dp[pos][m][ms]dp[pos][m][ms]为前缀剩下的长度原创 2016-03-28 20:31:08 · 464 阅读 · 1 评论 -
hdu 2089 数位dp
又一个水暴了的数位dp感觉数位dp相对于其他的dp来说,只是状态表示的维数多了一点,转移时需要注意的点多了一点,其他的好像也没什么毕竟转移的时候要注意的地方,在我目前所做的数位dp中,都是一样的存个代码好了(#includeusing namespace std;#define LL long longLL dp[10][10];int dig[原创 2016-03-12 10:05:36 · 234 阅读 · 0 评论 -
UESTC 250 windy数
人生第一个数位dp成就达成!#includeusing namespace std;#define LL long longLL dp[15][10][2];int dig[15];LL dfs(int pos,int pre,bool limit,bool leadz){ if(pos < 0) return 1; if(!limit原创 2016-03-11 21:49:26 · 524 阅读 · 0 评论 -
Codeforces 258B - Little Elephant and Elections
从[1,m][1,m]中依次选择77个数,满足前六个数中44和77的个数之和小于最后一个数的44和77的个数的方案数(mod1e9+7)\pmod{1e9+7}我们按照4和7的个数对[1,m]的数做等价类划分。然后dfs就好。前半部分可以用数位dp解决。#include<bits/stdc++.h>using namespace std;const int maxn = 12,mod = 1e9+原创 2016-10-08 08:40:15 · 388 阅读 · 0 评论