一道十分经典的数位DP的题目。

dp[i][j]表示最高位是数字i,连同最高位在内共有j位。注意边界的初始化。

接下来就是区间划分,特殊情况处理.....对了,如果不知道自己的方法是否正确,可以写一个测试函数:

bool check(int n){  //判断n是否符合条件
	int a[20];
	int c=0;
	while(n>0){
		a[c++]=n%10;
		n/=10;
	}
	for(int i=0;i<c;++i) if(a[i]==4) return false;
	for(int i=0;i<c-1;++i){
		if(a[i]*10+a[i+1]==26) return false;
	}
	return true;
}
inline int solve(int n){  //可以求得0~n之间有多少符合条件的数
	int ans=0;
	for(int i=0;i<=n;++i)
	 	if(check(i)) ++ans;
	return ans;
}

AC代码:

#include<cstdio>
#include<cstring>
#include<cmath>
const int maxn=20;
int dp[10][maxn];
void deal(){
	memset(dp,0,sizeof(dp));
	//初始化边界
	for(int i=0;i<10;++i){
		if(i==4) continue;
		else dp[i][1]=1;
	}
	for(int i=2;i<10;++i){ //length
		for(int j=0;j<10;++j){
			if(j==4) continue;
			for(int k=0;k<10;++k){
				dp[j][i]+=dp[k][i-1];
			}
		}
		dp[6][i]-=dp[2][i-1];
	}
}
inline int solve(int pre,int n,int len){
	if(pre==62||pre%10==4||pre/10==4) return 0;
	if(len==1){
		int ans=0;
		for(int i=0;i<=n;++i)
			if(i==4) continue;
			else ++ans;
		if(pre%10==6&&n>=2) --ans;
		return ans;
	}
	int ans=0;
	int m=(int)pow(10,len-1);
	int up=n/m;
	for(int i=0;i<up;++i){
		ans+=dp[i][len];
	}
	if(pre%10==6&&up>2) ans-=dp[2][len];
	return ans+solve(pre%10*10+up,n%m,len-1);
}
inline int getlen(int n){
	if(n==0) return 1;
	int c=0;
	while(n>0){
		n/=10;
		++c;
	}
	return c;
}
int main(){
	deal();
	int l,r;
	while(scanf("%d%d",&l,&r)!=EOF&&l&&r){
		int a=solve(0,r,getlen(r));
		int b=solve(0,l-1,getlen(l-1));
		//printf("%d-%d=%d\n",a,b,a-b);
		printf("%d\n",a-b);
	}
	return 0;
}

如有不当之处欢迎指出!

hdu2089 不要62--经典数位DP的更多相关文章

  1. ☆ [HDU2089] 不要62「数位DP」

    类型:数位DP 传送门:>Here< 题意:问区间$[n,m]$的数字中,不含4以及62的数字总数 解题思路 数位DP入门题 先考虑一般的暴力做法,整个区间扫一遍,判断每个数是否合法并累计 ...

  2. HDU2089 ------不要62(数位dp)

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

  3. HDU2089 不要62 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目大意:求区间 \([l,r]\) 范围内不包含数字"4"且不包含连续的数 ...

  4. hdu2089不要62(数位dp)

    #include <stdio.h> #include <string.h> ][]; ]; /* dp[i][0] 不含62,4 dp[i][1] 2开头 dp[i][2] ...

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

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

  6. HDU 2089 不要62 【数位dp】

    <题目链接> 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照 ...

  7. HDU 2089 不要62(数位dp模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...

  8. HDU 2089 不要62【数位DP入门题】

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

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

    题目:http://acm.acmcoder.com/showproblem.php?pid=2089 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新 ...

随机推荐

  1. cocos2dx 从2.2.6 到3.16 升级流水记录

    一个cocos2dx项目从2.2.6 升级至3.16 的过程,由于没有直升工具,类库升级也变动很大,有一部分需要手工完工升级.此记录供参考 1. 没有采用项目直升方式,先新建一个3.16的项目,然后把 ...

  2. form表单action=""的作用

    看项目时发现action="",可仍旧提交到后台相关页面了.查了一下,action=""相当于当前页面刷新,不过页面按照form表单提交参数到后台@参考文章

  3. 通过编程为Outlook 2007添加邮件规则

    Outlook 所支持的邮件规则相当有用,我们经常需要针对某些特征的邮件做特殊的处理.例如将其移动到某个特定文件夹,或者删除它等等. Outlook所支持的邮件规则主要两大类:收到邮件时和发送邮件时 ...

  4. Struts2.3.34+Hibernate 4.x+Spring4.x 整合二部曲之上部曲

    1 导入jar包 可以复制jar包或maven导入,本文最后会给出github地址 2 导入log4j.properties文件 og4j.appender.stdout=org.apache.log ...

  5. awk的sub函数和gsub函数的用法

    1. sub函数 [root@nhserver1 10]# echo "a b c 2011-11-22 a:d" | awk 'sub(/-/,"",$4)' ...

  6. 【转】awk 里的substr函数用法举例

    awk 里的substr函数用法举例: 要截取的内容:2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...

  7. Jmeter之性能压测Stepping Thread Group 逐步增加并发数 阶梯式加压并发 (十五)

    前段时间有描述过性能的测试类型 配置负载 Big Bang: 负载同时产生 Ramp up: 开始时候产生一定负载,然后每隔一段时间增加一些负载直到达到目标负载,这是典型模式 Ramp-up (wit ...

  8. HTML核心标签之表格标签(一)

    表格的基本语法: <body> <table> <tr><td></td><td></td></tr> ...

  9. sap中Excel的模版上传和下载

    一:事物码smw0 二:上传步骤 注:"包"为项目的包的名称. 三:下载代码 l_filename = 'XX.xls'. l_muban = 'z123'. *&---下 ...

  10. Halcon一日一练:图像、变量实时更新

    某些场合,我们需要刷新图像来识别图像处理过程的差异性,便于调试判断问题和预测.Halcon提供了图像刷新操作,这些操作不会改变程序的最终处理结果. 例程: **实时刷新图像 dev_update_wi ...