
动态规划之数位dp
文章平均质量分 89
code_mryxj
这个作者很懒,什么都没留下…
展开
-
hdu4507 (求平方和的数位dp)
题意:求指定范围内满足条件的平方和,结果要mod 10^9+7。 满足的条件是: ①不出现7 ②各位数和不是7的倍数 ③这个数不是7的倍数 这三个都是基础的数位dp问题,但是模板数位dp问题求的是满足条件的数量。这题是求这个范围内数的平方和。 也就是说在DP时候,要重建每个数,算出平方,然后求和。 需要维护三个值(推荐使用结构体), 假定dfs推出返回的结构体是next,当前结果的结构原创 2017-04-17 21:21:17 · 673 阅读 · 0 评论 -
hdu2089不要62 (数位dp入门题)
开始看了很久不是很理解数位dp模板的用法,看了好理解的写法,模范写了一下,理解一点数位dp怎么定义和状态转移。 dp[len][k]:从0到表示长度为len首个数字为k的数字串有满足条件的数量。 那么转移方程很好想。#include<bits/stdc++.h>using namespace std;int dp[10][10];void init(){ memset(dp,0,si原创 2017-04-13 21:16:04 · 1010 阅读 · 1 评论 -
hdu4734
题意: 定义f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+…a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字。 题目给出a,b,求出0~b有多少个不大于f(a)的数。思路: 常见数位dp定义含义:dp[len][presum]: 长度为len的前缀以presum开头的满足条件的个数。 而这题,行不通,因为每次f(a)都在变化,需要定义为三维的dp[le原创 2017-04-16 21:50:49 · 652 阅读 · 0 评论 -
Codeforces 55D Beautiful Number (数位dp)
题意:统计某段区间内满足它所有非零数位能整除这个数本身的数的个数。思路:首先这题要知道:一个数字要被它的所有非零位整除,即被他们的LCM整除。 然后,常见数位dp定义方式dp[len][presum]:表示长度为len并且前缀和为presum的满足条件数的个数。 所以这题根据题目要求的条件还需要一维状态记载前缀所有数的最小公倍数。{1~9}所有组合不同最小公倍数有48个,最大为2520.所以离散原创 2017-04-17 13:41:59 · 455 阅读 · 0 评论