HDU 3555 Bomb(1-n含有“49”的数字个数)

原创 2016年08月29日 18:08:39

题目链接:
HDU 3555 Bomb
题意:
求1到中含有“49”序列的数字的个数。491,149都是含有“49”序列但是“419”不是的。
数据范围:
分析:
数位dp。差不多也是模版题了。
从高位到低位记录前一位数字,并且记录当前是否已出现“49”序列,最后判断下状态,记忆化搜索。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef long long ll;

int T;
ll n;
int digit[20];
ll dp[20][10][2][2];

ll dfs(int pos, int pre, int state, int limit)
{
    if (pos == -1) return state;
    if (dp[pos][pre][state][limit] != -1) return dp[pos][pre][state][limit];
    int last = limit ? digit[pos] : 9; // 是否已达数值上界
    ll ret = 0;
    for (int i = 0; i <= last; ++i) {
        ret += dfs(pos - 1, i, state || (i == 9 && pre == 4), limit && i == last);
    }
    dp[pos][pre][state][limit] = ret;
    return ret;
}

ll solve()
{
    int len = 0;
    memset(dp, -1, sizeof (dp));
    memset(digit, 0, sizeof (digit));
    while (n) {
        digit[len++] = n % 10;
        n /= 10;
    }
    return dfs(len - 1, 0, 0, 1);
}

int main()
{
    scanf("%d", &T);
    while (T--) {
        scanf("%lld", &n);
        printf("%lld\n", solve());
    }
    return 0;
}
版权声明:缥缈玉京人,想语然、京兆眉妩。

HDU-3555 Bomb (数位DP)

数位DP入门题 设dp[i][0]表示长度为i,不含49的数字个数;dp[i][1]表示长度为i,不含49且最高位为9的数字个数;dp[i][2]表示长度为i,含有49的数字个数 不是很明白为什么第二...
  • idealism_xxm
  • idealism_xxm
  • 2016年05月08日 19:06
  • 597

HDU3555:Bomb(数位DP)

Problem Description The counter-terrorists found a time bomb in the dust. But this time the terrori...
  • libin56842
  • libin56842
  • 2013年08月15日 17:08
  • 4328

hdu3555---Bomb(数位dp,水)

Problem Description The counter-terrorists found a time bomb in the dust. But this time the terrori...
  • Guard_Mine
  • Guard_Mine
  • 2015年02月22日 22:51
  • 692

hdu(3555)——Bomb(不要49)

这道题和不要62那道题有些类似,这道题是不要出现连续的49。 思路大致一样,只是在对f数组进行初始化的时候,我们需要求的是数中不含有49的个数,然后最后利用n+1-cal(n+1)来求出正确答案,这...
  • ACMer_hades
  • ACMer_hades
  • 2015年08月26日 14:04
  • 652

hdu 3555 含有49的数 数位dp

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3555 题意: 给定任意n,计算从1~n中有多少数包含49 分析: 今天看到群里有个人问...
  • loveyou11111111
  • loveyou11111111
  • 2016年03月13日 17:22
  • 186

hdu HDU 3555 Bomb

题目描述:题目链接 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total...
  • Chendehaial
  • Chendehaial
  • 2016年06月14日 22:01
  • 238

[编程题]求 1-N 中数字 1 的个数

解1:简单粗暴的统计法。 public class Test { public static void main(String[] args) { Scanner scanner ...
  • qq_32199531
  • qq_32199531
  • 2016年12月01日 17:35
  • 384

【数位DP】 HDU 3555 Bomb

点击打开链接 求0-N之内 存在49的个数 先是统计了0-2^63内所有没有49的个数 n-getans(n+1)+1; getans(n+1)统计的是 0-n内的个数 #include #in...
  • u012749539
  • u012749539
  • 2014年12月08日 22:49
  • 539

【数位DP】【HDU 3555】Bomb

求1~N中有多少个数包含“49”字样,N   #include using namespace std; typedef unsigned long long u64; u64 f...
  • u013420930
  • u013420930
  • 2014年01月08日 19:43
  • 282

HDU 3555 Bomb [数位]

Description The counter-terrorists found a time bomb in the dust. But this time the terrorists im...
  • u013986860
  • u013986860
  • 2015年04月14日 22:07
  • 359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 3555 Bomb(1-n含有“49”的数字个数)
举报原因:
原因补充:

(最多只允许输入30个字)