数位DP模板
来源:互联网 发布:淘宝店铺类目在哪里看 编辑:程序博客网 时间:2024/06/06 22:24
通常的数位dp可以写成如下形式:
int dfs(int i, int s, bool e) { if (i==-1) return s==target_s; if (!e && ~f[i][s]) return f[i][s]; int res = 0; int u = e?num[i]:9; for (int d = first?1:0; d <= u; ++d) res += dfs(i-1, new_s(s, d), e&&d==u); return e?res:f[i][s]=res;}
其中:
f为记忆化数组;
i为当前处理串的第i位(权重表示法,也即后面剩下i+1位待填数);
s为之前数字的状态(如果要求后面的数满足什么状态,也可以再记一个目标状态t之类,for的时候枚举下t);
e表示之前的数是否是上界的前缀(即后面的数能否任意填)。
for循环枚举数字时,要注意是否能枚举0,以及0对于状态的影响,有的题目前导0和中间的0是等价的,但有的不是,对于后者可以在dfs时再加一个状态变量z,表示前面是否全部是前导0,也可以看是否是首位,然后外面统计时候枚举一下位数。It depends.
于是关键就在怎么设计状态。当然做多了之后状态一眼就可以瞄出来。
注意:
不满足区间减法性质的话(如hdu 4376),不能用solve(r)-solve(l-1),状态设计会更加诡异。
转自:http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html
0 0
- 数位dp模板
- 数位DP模板
- 数位DP模板
- 数位DP模板
- 【自用模板】数位dp
- 数位DP模板
- 数位DP模板
- 数位DP模板详解
- 数位DP模板
- 数位DP模板
- 数位DP模板
- 数位DP模板
- 数位DP(模板)
- 数位DP模板
- 数位DP模板
- 数位DP模板
- 【数位DP模板】
- 数位dp模板
- 集群 分布式 负载均衡
- 树的重心
- 关于 MySQL 密码你应该知道的那些事
- 如何卸载android设备中的apk
- 在魅族官网,如何发帖?
- 数位DP模板
- Hyper-v无法启动虚拟机,因为虚拟机管理程序未运行?
- C++构造函数对类成员变量初始化,使用初始化列表和构造函数内部直接赋值 的区别
- java文件上传带进度条的
- Android 保存数据到文件
- HDU 2819 — Swap 二分匹配
- SVN入门(一)
- 基于AFD驱动的进程流量控制
- 【工作笔记0005】IIS6.0 伪静态设置,伪静态规则