【算法笔记】数位dp小结
2015-03-14 16:47
183 查看
资料链接:
入门pptlink1:记忆化方式
link2
link3
论文1
论文2
//=====================//
记忆化的数位dp:
通常而言,有四个参数必须 dp( pos, flag, limit )
pos表示当前正在枚举的数位。
flag标志已经枚举的前缀是否某种性质(前面的数位和,是否含有某个数,前一个枚举的数等等。。),当然flag可以有多个。
limit表示当前是否为上限,有时还会记录是否有前导0。
相较而言,记忆化搜索更容易编写,需要维护的细节更少。
假设要对数位中没有5的数计数。
int digit[Maxn], dp[Maxn][flag]; // 在程序最开始初始化一次即可(假设有多个区间需要询问),想想为什么 void init() { memset(dp, -1, sizeof(dp)); } // flag 是否没有5 int go (int pos, int limit, int flag) { if (pos < 0) { return flag == 1; } if (limit || dp[pos][flag] == -1) { int tmp = 0; int last = limit ? digit[pos] : 9; for (int i=0;i<=last;++i) tmp += go (pos - 1, limit && (i == last), flag && (i != 5)); if (limit) return tmp; // 上界要单独计算,不能存状态 dp[pos][flag] = tmp; } return dp[pos][flag]; } // count [1, x] int Count(int x) { int len = 0; while (x) { digit[len ++] = x % 10; x /= 10; } return go (0, }
相关文章推荐
- 数位DP小结
- 数位DP小结
- |算法讨论|状压DP/位运算 学习笔记
- 数位DP专题小结--by sgx 数位DP专题小结--by sgx
- 蓝桥杯 算法训练 K好数(数位dp)
- POJ1018 DP 一道自己独立思考出的DP题目 兼 12月份算法学习小结[更新]
- 【学习笔记&训练记录】数位DP
- 有趣的数 算法的题解(数位DP问题)
- 小白算法练习 hdu 不要62 POJ 2282 the Counting problem 数位dp
- 基础数位DP小结
- 【算法学习笔记】84.序列DP 松弛+代价处理 CODE_VS 1048 石子归并
- 数位DP小结
- 机器学习笔记 监督学习算法小结(一)
- 【算法笔记】Aho-Corasick 算法(AC自动机) 小结
- ACM -- 算法小结(九)DP之Humble numbers
- 【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋
- 数位DP小结(阶段性)
- 数位DP小结_记忆化搜索版
- 数位dp小结(状压的第一次试水)
- 数位dp小结