题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3555

题目大意:从0开始到给定的数字N所有的数字中遇到“49”的数字的个数。

Sample Input
3
1
50
500
 
Sample Output
0
1
15

Hint

From 1 to 500, the numbers that include the sub-sequence "49" are "49","149","249","349","449","490","491","492","493","494","495","496","497","498","499", so the answer is 15.

分析:定义dp[25][3]

dp[len][0] 表示前len位没有49的数字的个数
dp[len][1] 表示前len位没有49但是以9结尾的数的个数
dp[len][2] 表示前len位有49的状态

代码如下:

 # include<stdio.h>
# include<string.h>
__int64 dp[][],N;
int digit[];
void init(){
memset(dp,,sizeof(dp));
dp[][] = ;
for(int i =; i<=; i++){
dp[i][] = dp[i-][]* - dp[i-][];
//①:dp[i-1][0]*10代表当前可选择0-9十个数 ②:dp[i-1][1]当前以9开头的数的个数。
//③dp[i-1][0]*10-dp[i-1][1]代表不包含49的个数。
dp[i][] = dp[i-][];
//①dp[i-1][0]代表以9开头的个数的数目
dp[i][] = dp[i-][]* + dp[i-][];
//以49开头的个数(分为两种情况:①dp[i][2]:x49xxx ②当第一个x为4时满足条件dp[i][1]x9xxxx
}
}
int main(){
init();
int T,len,flag,i;
__int64 ans;
scanf("%d",&T);
while(T--){
flag = ans = ;
scanf("%I64d",&N);
N++;
memset(digit,,sizeof(digit));
len = ;
while(N){ //逆序存放
digit[len++] = N%;
N /= ;
}
for(i=len-; i>; i--){
ans += digit[i] * dp[i-][]; //开头为x49的个数
if(flag)
ans += digit[i]*dp[i-][]; //开头为49的个数
else if(!flag && digit[i]>)
ans += dp[i-][]; //开头我x9(x>4)的个数
if(digit[i+]== && digit[i]==)
flag = ;
}
printf("%I64d\n",ans);
}
return ;
}

HDU 3555 Bomb (数位DP)的更多相关文章

  1. HDU 3555 Bomb 数位dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Mem ...

  2. HDU 3555 Bomb 数位DP 入门

    给出n,问所有[0,n]区间内的数中,不含有49的数的个数 数位dp,记忆化搜索 dfs(int pos,bool pre,bool flag,bool e) pos:当前要枚举的位置 pre:当前要 ...

  3. HDU - 3555 - Bomb(数位DP)

    链接: https://vjudge.net/problem/HDU-3555 题意: The counter-terrorists found a time bomb in the dust. Bu ...

  4. Bomb HDU - 3555 (数位DP)

    Bomb HDU - 3555 (数位DP) The counter-terrorists found a time bomb in the dust. But this time the terro ...

  5. HDU(3555),数位DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others ...

  6. HDU 3555 Bomb (数位DP-记忆化搜索模板)

    题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...

  7. hud 3555 Bomb 数位dp

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Subm ...

  8. hdoj 3555 BOMB(数位dp)

    //hdoj 3555 //2013-06-27-16.53 #include <stdio.h> #include <string.h> __int64 dp[21][3], ...

  9. 数位DP入门之hdu 3555 Bomb

    hdu 3555 Bomb 题意: 在1~N(1<=N<=2^63-1)范围内找出含有 ‘49’的数的个数: 与hdu 2089 不要62的区别:2089是找不不含 '4'和 '62'的区 ...

  10. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

随机推荐

  1. hadoop-1.2.0安装记录

    一.添加用户(各机器均一致)     添加组: sudo addgroup hadoop     添加用户并到组:sudo adduser -ingroup hadoop hadoop 二.ssh无验 ...

  2. HW3.27

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  3. 利用系统镜像文件安装.Net框架的方式

    最近重装系统之后,在安装部分程序时需要.NET3.5框架,在线安装时间较长,网上搜到了一个很好的解决办法.利用windows系统镜像.首先将镜像加载到驱动中比如L,然后在cmd中输入 dism.exe ...

  4. 使用ndk standalone工具链来编译某个平台下的库

    地址: http://www.kandroid.org/ndk/docs/STANDALONE-TOOLCHAIN.html It is now possible to use the toolcha ...

  5. C# WinForm多线程(三)---- Control.Invoke[转]

    开发中遇到更新Winform中控件假死问题,通过看了这篇文章了解了原理,感谢!此处标记起来,以备查看! 原文地址:http://www.cnblogs.com/joechen/archive/2009 ...

  6. 工作7年,从《一个苏州IT人的5年挨踢经历》系列开始,博客1年半,纯纪念

    真正涉足CSDN,还是从<一个苏州IT人的5年挨踢经历>系列的发帖开始,当时大家比较捧场,遂把帖子内容整理,其后创建CSDN博客并发表于其上.有了这个开端,后续就习惯性的开始在CSDN写技 ...

  7. Ⅴ.spring的点点滴滴--引用其他对象或类型的成员

    承接上文 引用其他对象或类型的成员 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class Person { public string Name { ...

  8. offsetWidth和clientWidth的介绍和区别

    1.offsetLeft 假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 间隔上方或上层控件的地位,整型,单位像素. obj.offsetLeft 指 obj 间隔左方 ...

  9. 立体视觉-opencv中立体匹配相关代码

    三种匹配算法比较 BM算法: 该算法代码: view plaincopy to clipboardprint? CvStereoBMState *BMState = cvCreateStereoBMS ...

  10. android_自定义布局

    1.需要实现view类 2.如果需要实现自定义属性则: 1.定义资源文件attrs---->values 2. <?xml version="1.0" encoding ...