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;
}
版权声明:缥缈玉京人,想语然、京兆眉妩。

相关文章推荐

计算1到n中的1的个数

b[i]表示n数字从小到大第i位是什么 c[i]表示1到b[i]b[i-1]....1中的1的个数,a[i]表示1到10^i-1中有几个1 sum表示从低位向高位循环过程中累计的值,最后是n 接下...

HDU 3555 Bomb(数位DP)

HDU 3555 Bomb(数位DP) ACM 题目地址:HDU 3555 题意:  问(0, n]里面有几个数有'49'这个子串。 分析:  裸数位DP。  直接用DF...
  • hcbbt
  • hcbbt
  • 2014年07月26日 19:08
  • 3046

hdu3555 数位dp

http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists fo...

HDU3555

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 与HDU2089(不要62)相比,这道题是 “ 要49 ” ,比 “不要62” 的 dp[len...

hdu3555(数位dp)

链接:点击打开链接 题意:求1~N中含49的数的个数(4和9必须相邻) 代码:#include #include #include #include using namespace std; ...

hdu3555 + 2089 (数位dp入门)

hdu3555 给出数字n,要求1到n范围内所有的数字中出现连续49的数字的个数。n很大。 例如500,那么出现连续49的数字有49,149,249,349,449,490,491,942...4...

HDU3555:Bomb(数位DP)

Problem Description The counter-terrorists found a time bomb in the dust. But this time the terrori...

(数位DP 1.2)hdu 3555 Bomb(统计1~n中,包含49的数的个数)

题目:BombTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Sub...

[ACM] hdu 3555 Bomb (数位DP,统计1-N中含有“49”的总数)

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

hdu3555 Bomb(要49)

Problem Description The counter-terrorists found a time bomb in the dust. But this time the terroris...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 3555 Bomb(1-n含有“49”的数字个数)
举报原因:
原因补充:

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