码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2089 不要62

时间:2015-03-18 12:00:59      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089

排位赛补题的时候遇到数位dp根本不会,先找道简单的写写orz,过了都不知道怎么过的,反正先传上来orz

dp[i][j]表示位数为i,最高位为j时不含4和62的数的个数,学自百度文库:http://wenku.baidu.com/view/9de41d51168884868662d623.html

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[10][12],digit[9];
void dp()
{
    f[0][0]=1;
    for(int i=1; i<9; i++)
        for(int j=0; j<10; j++)
            for(int k=0; k<10; k++)
            {
                if((j==6&&k==2)||j==4)
                    continue;
                f[i][j]+=f[i-1][k];
            }
}
int solve(int n)
{
    memset(digit,0,sizeof(digit));
    int k=1;
    while(n)
    {
        digit[k++]=n%10;
        n/=10;
    }
    int ans=0;
    for(int i=k; i>=1; i--)
    {
        for(int j=0; j<digit[i]; j++)
        {
            if((j==2&&digit[i+1]==6)||j==4)
                continue;
            ans+=f[i][j];
        }
        if(digit[i]==4||(digit[i]==2&&digit[i+1]==6))break;
    }
    return ans;
}
int main()
{
    int m,n;
    dp();
    while(scanf("%d%d",&n,&m)&&n&&m)
    {
        printf("%d\n",solve(m+1)-solve(n));
    }
    return 0;
}

 

HDU 2089 不要62

标签:

原文地址:http://www.cnblogs.com/xuxueyang/p/4346665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!