>传送门<

题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个。

思路:数位dp

就是数位上不能有4也不能有连续的62,没有4的话在枚举的时候判断一下,不枚举4就可以保证状态合法了,所以这个约束没有记忆化的必要,而对于62的话,涉及到两位,当前一位是6或者不是6这两种不同情况我计数是不相同的,所以要用状态来记录不同的方案数。
dp[pos][sta]表示当前第pos位,前一位是否是6的状态,这里sta只需要去0和1两种状态就可以了,不是6的情况可视为同种,不会影响计数。

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int a[20];
int dp[20][2]; int dfs(int pos, int pre, int sta, int limit){
if (pos==0) return 1;
if (!limit&&dp[pos][sta]!=-1) return dp[pos][sta];
int up = limit?a[pos]:9;
int tmp = 0;
for (int i = 0; i <= up; i++) {
if (pre==6&&i==2) continue;
if (i==4) continue;
tmp += dfs(pos-1, i, i==6, limit&&i==a[pos]);
}
if(!limit) dp[pos][sta] = tmp;
return tmp;
}
int solve(int x) {
int pos = 1;
while (x){
a[pos++] = x%10;
x /= 10;
}
return dfs(pos-1, -1, 0, 1);
} int main()
{
int l, r;
memset(dp, -1, sizeof(dp));
while (~scanf("%d%d", &l, &r)&&l+r)
printf("%d\n", solve(r)-solve(l-1));
return 0;
}

最新文章

  1. RecyclerView使用大全
  2. 深入学习jQuery自定义插件
  3. 【C语言训练】尼科彻斯定理
  4. 【Duke-Image】Week_5 Segmentation
  5. 亚马逊EC2 ubuntu下安装mysql远程无法连接问题o
  6. H5 认识canvas
  7. Javascript函数的简单学习
  8. ZooKeeper快速搭建
  9. 六 mybatis高级映射(一对一,一对多,多对多)
  10. 转:ASP.NET MVC利用TryUpdateModel来做资料更新 (一)
  11. Excepion
  12. MBR解析
  13. Could not resolve placeholder
  14. 监听UITextFiled输入文字长度的变化
  15. 让WPS支持VHDL的关键词加粗
  16. PHP之基本语法
  17. (转)详解汇编系统调用过程(以printf为例)
  18. 【Shell基础】字符串删除
  19. jmeter的学习路线
  20. ABAQUS复合材料

热门文章

  1. LeetCode235 二叉搜索树的最近公共祖先
  2. 【Flutter】功能型组件之导航返回拦截
  3. SpringBoot启动报端口已被占用--解决
  4. 了解一下IO控制器与控制方式
  5. APPIUM-Android自动化元素定位方式
  6. 【Linux】ssh远程连接到指定ip的指定用户上
  7. MySQL查询截取分析
  8. 攻防世界-crypto-easychallenge(.pyc反编译)
  9. disfunc绕过
  10. 【开源】我和 JAP(JA Plus) 的故事