HDU 3555 Bomb (简单数位DP)

来源:互联网 发布:服装销售网络渠道 编辑:程序博客网 时间:2024/05/18 02:54

同上,dp[i][0] 不存在,dp[i][1] 不存在,且上一位为4,dp[i][2] 存在


代码:

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;typedef __int64 LL;LL dp[20][3],l,r;LL bit[20],top;int get_news(int s,int d){    if(s == 0){        if(d == 4) return 1;        return 0;    }    if(s == 1){        if(d == 9) return 2;        if(d == 4) return 1;        return 0;    }    return 2;}LL dfs(int i,int s,bool e){    if(i == -1) return s == 2 ? 1 : 0;    if(!e&&dp[i][s] != -1) return dp[i][s];    LL res = 0;    int d,u = e ? bit[i] : 9;    for(d = 0 ; d <= u ; d++){        res += dfs(i-1,get_news(s,d),e&&(d==u));    }    return e?res:dp[i][s]=res;}LL solve(LL n){    top = 0;    for(;n;n/=10) bit[top++] = n%10;    return dfs(top-1,0,1);}int main(){    int cas;    scanf("%d",&cas);    memset(dp,-1,sizeof(dp));    while(cas--){        scanf("%I64d",&r);        printf("%I64d\n",solve(r));    }    return 0;}


0 0
原创粉丝点击