HDU2089 数位DP

Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
 
Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
 
Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
 
Sample Input
1 100 0 0
 
Sample Output
80
 
Author
qianneng
 

初学数位DP,看了ppt后打的,需要注意的是m要++,因为区间要小一位。

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define ll long long
#define il inline
#define db double
using namespace std;
il int gi()
{
    int x=0,y=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')
        y=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*y;
}
int f[10][10],i,j,k;
int d1[10],d2[10];
int main()
{
    f[0][0]=1;
    for(i=1;i<=9;i++)
        for(j=0;j<=9;j++)
            for(k=0;k<=9;k++)
                if(j!=4&&!(j==6&&k==2))
                    f[i][j]+=f[i-1][k];
    int n,m;
    while(n=gi(),m=gi())
    {
        if(!n&&!m)
        return 0;
        m++;
        memset(d1,0,sizeof(d1));
        memset(d2,0,sizeof(d2));
        int len1=0,len2=0;
        while(n!=0)
        {
            d1[++len1]=n%10;
            n/=10;
        }
        while(m!=0)
        {
            d2[++len2]=m%10;
            m/=10;
        }
        int sum1=0,sum2=0;
        for(i=len1;i>=1;i--)
        {
            for(j=0;j<d1[i];j++)
                if(j!=4&&!(j==2&&d1[i+1]==6))
                sum1+=f[i][j];
            if(d1[i]==4||(d1[i]==2&&d1[i+1]==6))
            break;
        }
        for(i=len2;i>=1;i--)
        {
            for(j=0;j<d2[i];j++)
                if(j!=4&&!(j==2&&d2[i+1]==6))
                sum2+=f[i][j];
            if(d2[i]==4||(d2[i]==2&&d2[i+1]==6))
            break;
        }
        printf("%d
",sum2-sum1);
    }
    return 0;
}
PEACE
原文地址:https://www.cnblogs.com/gshdyjz/p/7420058.html