数位dp
来源:互联网 发布:稿费 知乎 编辑:程序博客网 时间:2024/06/08 02:59
数位dp大致有两种写法,第一种是通过递推关系,推出不同状态之间的数学关系,预处理出dp数组内的数据。但这对数学的要求很高,一般人很难驾驭。
第二种是通过记忆化搜索,程序直白易理解,适合大多数情况下使用。
数位dp也是有模板的,因为核心思想都是差不多的。
#include <cstdio>#include <cstring>int dp[8][2]; //dp数组存储什么信息视题目具体要求而定int dfs (int * num, int pos, int status, bool limit) { //status的含义也是需要取决于题意 if (pos == 0) { return 1; } if (!limit && dp[pos][status] != -1) { return dp[pos][status]; } int END = limit ? num[pos] : 9; int ans = 0; for (int i = 0; i <= END; i++) {// if (i == 4 || (status == 1 && i == 2)) { 这一块是解决题目的核心代码// continue;// }// int tmp = status;// if (i == 6) {// tmp = 1;// }// else {// tmp = 0;// }// ans += dfs (num, pos - 1, tmp, limit && i == END); } if (!limit) { dp[pos][status] = ans; } return ans;}int solve (int x) { int num[8]; int cnt = 0; while (x) { num[++cnt] = x % 10; x /= 10; } return dfs (num, cnt, 0, 1);}int main () { int n, m; memset (dp, -1, sizeof (dp)); while (~scanf ("%d%d", &n, &m) && m) { printf ("%d\n", solve (m) - solve (n - 1)); } return 0;}
http://blog.csdn.net/wust_zzwh/article/details/52100392
阅读全文
0 0
- 数位dp
- 数位DP
- 数位DP
- 数位dp
- 数位dp
- 数位dp
- 数位DP
- 数位dp
- 数位DP
- 【数位DP】
- 数位DP
- 数位dp
- 数位dp
- 数位DP
- 数位DP
- 数位dp
- 数位DP
- 数位DP
- H5基础概念
- Lua性能优化技巧
- tensorflow 虚拟环境配置
- win API 操作 ini 文件
- 集合框架(六)(续) 实用类:时间和日期处理类
- 数位dp
- Hbuilder连接第3方模拟器(夜神)
- Ubuntu14.04在python中安装CRF++
- Vue关于install自定义全局插件
- thinkphp 修改后的数据和原数据一样,save方法返回值
- 在C++中,有哪4个与类型转换相关的关键字?这些关键字各有什么特点,应该在什么场合下使用?
- MFC的Main函数跑哪去了
- Function HDU
- MUI在登陆页面重写back方法,使得用户点击手机返回键不会返回其它页面