摘要:
原题链接 考察:数位dp 思路: 求回文数字的个数. dfs参数: 1.pos 枚举到第几位 2.len 回文数的长度. 其实不需要变量记录是否合法,不合法的不取搜就行了. ##Code #include <iostream> #include <cstring> using namespace s 阅读全文
摘要:
原题链接 考察:数位dp 思路: 定义一个变量st,目前枚举的数字的状态. st==0 跟上位比递减 st==1 跟上位比严格递增 st==2 出现了山峰现象. 如果出现了与上位相等或者之前出现了山峰现象,直接把状态传递下去. Code #include <iostream> #include <c 阅读全文
摘要:
原题链接 考察:数位dp 思路: 预处理f[i][j][k]表示前i位数,最高位是j,k出现的次数. f[i][j][k] = \(\sum_{t=0}^9\) f[i-1][t][k]; (j!=k) f[i][j][k] = 10i-1+\(\sum_{t=0}^9\) f[i-1][t][k] 阅读全文
摘要:
原题链接 考察:数位dp 莫得思路,参考大佬的题解(.) 思路: 1. 整除所有数位的数 == 整除所有数位的lcm 2. sum%(a*b)%b = sum%b; dp方程: f[pos][pre_sum][pre_lcm]+=f[pos-1][pre_sum*10+i][lcm(pre_lcm, 阅读全文
摘要:
原题链接 考察:数位dp 这道题能用递推的方式实现吗...如果有请告知本蒟蒻(.) 错误思路: 建立dp数组f[pos][len][last]表示枚举到第pos位,目前长度为len,上一位是last的情况.如果我们枚举的i>last,len+1.如果i<=last,len不变,last不变. WA数 阅读全文
摘要:
原题链接 考察:数位dp+状压dp 思路: 因为要求每个数字的出现次数,我们只能把所有数字的出现次数记下来.因为数字比较少考虑状压.有三种状态: 0:没出现过 1:出现奇数次 2:出现偶数次 这道题的状压dp预处理并根据情况计数感觉不是很好实现,如果用记忆化搜索我们只需要到终点看是否合法就行.注意前 阅读全文
摘要:
一.递推 学的第一种方法就是这个,但是个人认为这种方式在某些题上比较难实现,比如:Blance Number(HDU-3709).这道题本蒟蒻没想出怎么用递推预处理,反而是记忆化搜索的方式更容易懂. 以HDU-2089为例,本题的递推还是比较好实现的. 代码 二.记忆化搜索 这种方法就比较烂大街了, 阅读全文
摘要:
原题链接 考察:数位dp 思路: 预处理的思路就是像背包dp那样不超过体积V的方案数,这里V对应f(a). #include <iostream> #include <cstring> #include <vector> using namespace std; typedef long long 阅读全文
摘要:
原题链接 考察:数位dp 这个用循环没想出来怎么写,反倒是dfs写法很容易理解(.),菜是原罪,如果有循环预处理写法请告诉本蒟蒻QAQ. 思路: 参考数位dp记搜模板.dfs带四个变量: LL dfs(int pos,int sum,int mid,bool limit) /*分别是枚举到第几位,平 阅读全文
摘要:
原题链接 考察:数位dp 思路: 入门题(然后做了一个小时) 这里预处理方案数是用组合数.如果我们直接套模板会发现答案不对,因为我们不同数字的二进制位数不同,前导零不应该被计入. 先算出n有的二进制位数符合条件个数,然后再计算二进制位数比n小的即可. ##Code #include <iostrea 阅读全文