HDU 2089(数位DP)

来源:互联网 发布:淘宝上好的cos店 编辑:程序博客网 时间:2024/05/17 07:37

原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2089

转载自别人的代码

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>using namespace std;int dp[10][20];void Build(){    memset( dp, 0, sizeof(dp) );    dp[0][0] = 1;    for( int i = 1; i <= 7; i++ )    {        for( int j = 0; j < 10; j++ )        {            for( int k = 0; k < 10; k++ )                if( j != 4 && !(j == 6 && k == 2) )                    dp[i][j] += dp[i-1][k];        }    }}int judge( int num ){    int digit[10];    int length = 1;    while( num )    {        digit[length++] = num % 10;        num /= 10;    }    digit[length] = 0;    int ans = 0;    for( int i = length-1; 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] == 2 && digit[i+1] == 6) )            break;    }    return ans;}int main(){    int n, m;    Build();    while( scanf("%d %d", &n, &m) != EOF && (n+m) )    {        printf( "%d\n", judge(m+1) - judge(n) );    }    return 0;}
0 0
原创粉丝点击