hdu 2089 不要62(数位dp)

来源:互联网 发布:现货倚天屠龙指标源码 编辑:程序博客网 时间:2024/05/28 05:16

不要62

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2089

解题思路:

数位dp。

AC代码:

#include <bits/stdc++.h>using namespace std;int dp[10][10];void init(){    memset(dp,0,sizeof(dp));    dp[0][0] = 1;    for(int i = 1; i <= 7; i++){        for(int j = 0; j < 10; j++){//枚举第i为可能出现的数            for(int k = 0; k < 10; k++){//枚举第i-1为可能出现的数                if(j != 4 && !(j == 6 && k == 2))                    dp[i][j] += dp[i-1][k];            }        }    }}int solve(int n){    int digit[10];    int len = 0;    while(n){        digit[++len] = n%10;        n /= 10;    }    digit[len+1] = 0;    int ans = 0 ;    for(int i = len; i > 0; i--){        for(int j = 0; j < digit[i]; j++){            if(j != 4 && !(digit[i+1] == 6 && j == 2))                ans += dp[i][j];        }        if(digit[i] == 4 || (digit[i+1] == 6 && digit[i] == 2))            break;    }    return ans;}int main(){    init();    int n,m;    while(scanf("%d%d",&n,&m),n+m){        printf("%d\n",solve(m+1)-solve(n));    }    return 0;}


0 0