数位DP 不要62
数位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的更多相关文章
- HDU 2089 数位dp入门
开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdi ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2089 不要62(数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715 数位数是从右向 ...
- 【数位DP】Hdu 2089:不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位dp入门 hdu2089 不要62
数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...
- hdu2089:不要62(基础数位dp)
题意:规定一个合法的号码不能含有4或者是连续的62 给定区间[n,m] 问此区间内合法的号码的个数 分析:数位dp dp[i][j]代表 最高位为 j 的 i 位数有多少个合法的 然后按题目规则进行转 ...
- 【数位DP】【HDU2089】不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 2089 不要62(入门数位dp)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【Hdu2089】不要62(数位DP)
Description 题目大意:给定区间[n,m],求在n到m中没有"62"或"4"的数的个数. 如62315包含62,88914包含4,这两个数都是不合法的 ...
随机推荐
- tensorflow高阶操作
本篇内容有:如何根据坐标有目的的选择(where).如何根据坐标有目的的更新(scatter_nd).如何生成一个坐标系() 1.where where针对的tensor是一个bool类型的tenso ...
- 【已解决】redis-py-cluster安装成功但导入失败,提示cannot import name b
背景: 一直跑的好好的自动化突然跑不起来了,提示是在导包的时候发生错误 发生错误的行是 from rediscluster import StrictRedisCluster 提示信息如下 检查安装包 ...
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优[转]
调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...
- Java中WEAK_PASSWORD_HASH的修改策略
在采用SHA-256对数据进行加密时,我们可以直接采用下面的方式进行处理: public static String encodeBySha256(String content) { String e ...
- gulp常用插件之del使用
更多gulp常用插件使用请访问:gulp常用插件汇总 del这是一款删除文件的工具. 更多使用文档请点击访问del工具官网. 安装 npm install del API del(patterns, ...
- equals 为什么要把常量写在前面?
看例子 使用str1.equals("abc"); 如果str1是null,空是没有equals方法的,会抛出空指针异常 如果"abc".equals(str1 ...
- Typecho的卡哇伊小猫咪小插件(Live2D猫咪插件)
之前看到一个博客,被它博客上的动态小猫咪给吸引了,这个纯粹就是一个在线撸猫的神器啊.但是在网上寻找一番,并没有找到合适的插件,或者说没有找到合适的模型,因此无奈之后,只能向该博主请教,在它写的博客上, ...
- Mysql分库分表导出导入和数据量统计测试
需求:添加创建了分库分表后,业务可能将数据已经写入,但未来得及接入到otter汇总库.接入汇总库前需要初始化这部分数据. 1.导出 ip_port_list ) len=${#ip_port_list ...
- LAMP(六)之以CentOS6自带的rpm包组合安装lamp
1.Centos7部署应用wordpress 1. 安装php.php-mysql.mariadb yum install php php-mysql mariadb-server 2. 测试 cd ...
- File FileStream StreamReader和StreamWriter
File 静态类 ReadAllBytes 和 WriteAllBytes ,用于一次性全部读取和写入小文件的字节码, ReadLine ReadkAll 用于一 ...