HDU3555(数位DP)

来源:互联网 发布:苹果软件中文字体 编辑:程序博客网 时间:2024/06/05 10:31

题意:求区间[a,b],包含49的数有多少,这题只需把hdu2089稍微改下就行;

#include <iostream>#include <cstdio>using namespace std;typedef long long LL;LL dp[100][100];void init(){    dp[0][0] = 1;    for(int i = 1; i <= 20; i++)        for(int j = 0; j < 10; j++)            for(int k = 0; k < 10; k++)               if(!(j == 4 && k == 9))                        dp[i][j] += dp[i-1][k];}LL solve(LL n){    int d[100];    int len = 0;    while(n > 0){        d[++len] = n%10;        n /= 10;    }    d[len + 1] = 0;    LL ans = 0;    for(int i = len; i >= 1; i--){        for(int j = 0; j < d[i]; j++){            if(!(d[i+1] == 4 && j == 9)) ans += dp[i][j];        }        if((d[i] == 9 && d[i+1] == 4)) break;    }    return  ans;}int main(){#ifdef xxz    freopen("in.txt","r",stdin);#endif // xxz    LL n,T;    init();    cin>>T;    while(T--){        cin>>n;        cout<<n - (solve(n+1) - solve(1))<<endl;    }    return 0;}


0 0
原创粉丝点击