数位DP的问法是从某个数到某个数的区间里,求出满足题目要求的个数;

如本题所说的不要62和4,就是求出这个区间内,满足这一条件的数;

比如问 6 199的这个区间内满足条件的数,那么就求出1到199满足的数减去1到(6-1)满足的数即可;

那么 具体怎么从操作呢?

首先,我们先求出这个数的a[]数组,求出每一位具体是什么数(dfs的时候需要用到)

然后开始dfs,从最高位开始逐步深搜下来,将不满足的情况过滤掉,然后将满足普遍情况的值保存下来

那么哪些是普遍情况呢:就是无论不会被限制条件限制掉的状态的数

最后枚举到最低位-1,再层层回溯就好了,

本题中的体现形式是:!limit

 #include<cstdio>
#include<string.h>
using namespace std;
const int maxn=;
int dp[maxn][],a[maxn];
int dfs(int pos,int pre,int sta,bool limit)
{
if(pos==-) return ; //枚举到比最低为少一位的时候,就开始回溯
if(!limit&&dp[pos][sta]!=-) return dp[pos][sta]; //满足普遍情况的就可以直接用
//这是十分必要的,没有这一步的话跟普通dfs没什么区别
int up=limit?a[pos]:; //保存这个数的每一位的作用就体现在这里了
//假如这一位数是5,那么他枚举的数便不能超过这个数
int tmp=;
for(int i=;i<=up;i++){
if(i==) continue;
if(pre==&&i==) continue; //不满足的情况就过滤;
tmp+=dfs(pos-,i,i==,limit&&i==a[pos]);
}
if(!limit) dp[pos][sta]=tmp; //满足普遍情况就保存;
return tmp;
}
int solve(int n)
{
int pos=;
while(n){
a[pos++]=n%; //将这个数每一位的数保存下来;
n/=;
}
return dfs(pos-,-,,true);
}
int main()
{
int n,m;
memset(dp,-,sizeof(dp));
while(scanf("%d%d",&n,&m)!=EOF){
if(m==&&n==) break;
printf("%d\n",solve(m)-solve(n-));
}
return ;
}

数位DP 不要62的更多相关文章

  1. HDU 2089 数位dp入门

    开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdi ...

  2. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. HDU 2089 不要62(数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715   数位数是从右向 ...

  4. 【数位DP】Hdu 2089:不要62

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 数位dp入门 hdu2089 不要62

    数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...

  6. hdu2089:不要62(基础数位dp)

    题意:规定一个合法的号码不能含有4或者是连续的62 给定区间[n,m] 问此区间内合法的号码的个数 分析:数位dp dp[i][j]代表 最高位为 j 的 i 位数有多少个合法的 然后按题目规则进行转 ...

  7. 【数位DP】【HDU2089】不要62

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. hdu 2089 不要62(入门数位dp)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 【Hdu2089】不要62(数位DP)

    Description 题目大意:给定区间[n,m],求在n到m中没有"62"或"4"的数的个数. 如62315包含62,88914包含4,这两个数都是不合法的 ...

随机推荐

  1. linux安装docker和docker compose

    运行 sudo -s 切换到root用户. 1.卸载旧版本Docker(如果系统之前没安装过Docker,可以跳过): yum remove docker \ docker-client \ dock ...

  2. 怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现

    Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. T ...

  3. LeetCode刷题 --杂篇 --数组,链表,栈,队列

    武汉加油,中国加油.希望疫情早日结束. 由于疫情,二狗寒假在家不能到处乱逛,索性就在家里系统的刷一下算法的内容,一段时间下来倒也有些小小的收获.只是一来家中的小破笔记本写起博客来实在不是很顺手,二来家 ...

  4. Android_关于自定义view的dialog有黑影的问题

    跟默认选中的主题有关 在build段代码中加入这行代码 dialog.getWindow().setBackgroundDrawableResource(android.R.color.transpa ...

  5. PHPStorm使用XDebug调试

    (一)php安装xdebug扩展,PHPStorm+XDebug单步调试 (二)PHPStorm配置XDebug (三)PHPStorm使用XDebug调试 (四)PhpStorm+Xdebug配置单 ...

  6. react-父子子孙组件嵌套-context

    方案一 import React from 'react' import ReactTypes from 'prop-types' /* // 最外层的父组件 export default class ...

  7. [转] c# 中使用opencv进行视频捕获

    简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和OpenCV环境的人.这个程序完全基于Visual Stud ...

  8. 用Java在excel单元格中设置超链接

    (一)问题引入 有时候我们在导入数据到excel中时可能要给某个文件或图片设置超链接,例如链接到外网或者是本地的某个目录.我们可以通过Java代码来实现,借助POI库. (二)解决方案 下面直接给出参 ...

  9. UTF自动化测试工具

    自UFT推出后,QTP慢慢退出历史舞台 UFT测试的基本流程:录制测试脚本—-编辑测试脚本—-调试测试脚本—-运行测试脚本—-分析测试结果 UFT(QTP)介绍   http://blog.csdn. ...

  10. 数据预处理 | 使用 OneHotEncoder 及 get_dummuies 将分类型数据转变成哑变量矩阵

    [分类数据的处理] 问题: 在数据建模过程中,很多算法或算法实现包无法直接处理非数值型的变量,如 KMeans 算法基于距离的相似度计算,而字符串则无法直接计算距离 如: 性别中的男和女 [0,1] ...