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

HDU 2089 不要62

时间:2021-02-22 12:12:38      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:cout   last   limit   hdu   直接   条件   bool   ++   pre   

状态表示:
dp[len][sta]表示当前第len位,上一位为last的情况下满足条件的数的个数。

int f[15][10];
int a[15];
int l,r;

int dfs(int len,int last,bool limit)
{
    if(!len) return 1;
    if(!limit && ~f[len][last]) return f[len][last];//如果没有限制且已求解,则直接返回,无需递归。
    int num=limit?a[len-1]:9;
    int res=0;
    for(int i=0;i<=num;i++)
    {
        if(last == 6 && i == 2) continue;
        if(i == 4) continue;
        res+=dfs(len-1,i,limit&&i==num);
    }
    if(!limit) f[len][last]=res;
    return res;
}

int dp(int x)`//求解[0...x]之间满足条件的个数 `
{
    int len=0;
    while(x)
    {
        a[len++]=x%10;
        x/=10;
    }
    return dfs(len,0,1);`//如果不包括0,此处减1即可`
}

int main()
{
    while(cin>>l>>r,l+r)
    {
        memset(f,-1,sizeof f);
        cout<<dp(r)-dp(l-1)<<endl;
    }
    //system("pause");
    return 0;
}

HDU 2089 不要62

标签:cout   last   limit   hdu   直接   条件   bool   ++   pre   

原文地址:https://www.cnblogs.com/fxh0707/p/14423778.html

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