随笔分类 - ACM / 动态规划 数位dp
摘要:原题链接 考察:数位dp+高精 思路: 数位dp太裸了,所以考察的是高精,参考大佬写了压位的高精,以后可以拿出来%. 转移的第三重循环不要从0~M,而是枚举这一位数字是什么. ##Code #include <iostream> #include <cstring> #include <algori
阅读全文
摘要:原题链接 考察:数位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预处理并根据情况计数感觉不是很好实现,如果用记忆化搜索我们只需要到终点看是否合法就行.注意前
阅读全文
摘要:原题链接 考察:数位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
阅读全文
摘要:原题链接 考察:数位dp 思路: 只从看了那道CF55D题我数位dp越写越懵(.) 这道题用容斥原理写的,有正常的循环写法: GO 要注意求的数不同,最后判断条件也不同. Code #include <iostream> #include <cstring> #include <vector> us
阅读全文
摘要:原题链接 考察:数位dp 思路: 应该是入门题,但我WA了两次....这道题直接求连续的49反而不大好求,我们反过来求不连续49的个数,然后再减去即可. ##Code #include <iostream> #include <cstring> #include <vector> using nam
阅读全文
摘要:原题链接 考察:数位dp 思路: 预处理时,不计入每位数字为4或首位为6,次位为2的数字. 但是注意计算左分支的时候,我们是ans+=f[i+1][枚举的数字],如果枚举的数字为2,实际还需特判上一位.因为预处理首位数字为2时没有考虑上一位是什么. Code #include <iostream>
阅读全文