zoukankan      html  css  js  c++  java
  • HDU2089 不要62 数位dp

    网址:https://vjudge.net/problem/HDU-2089

    题意:

    从给定的范围中求出有几个数的序列中不包括$‘4’$和$‘62’$。

    题解:

    数位dp板子题,看注释。

    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    int dp[20][2];//第i是j的情况
    int a[20];
    int dfs(int pos,int pre,bool lim,bool tag)//这一位的数字,上一位数字,上限,6的标记
    {
        if(pos==-1)//已经到尽头了
            return 1;
        if(!lim&&dp[pos][tag]!=-1)//记忆化搜索,一定要判断是否有边界,有边界时计算不存在情况。
            return dp[pos][tag];
        int res=lim?a[pos]:9;//设置边界
        int ans=0;
        for(int i=0;i<=res;++i)
        {
            if(i==4||(i==2&&pre==6))
                continue;
            ans+=dfs(pos-1,i,lim&&i==a[pos],i==6);//有边界且i到达了边界,下一位也才有边界
        }
        if(!lim)
            dp[pos][tag]=ans;//记录
        return ans;
    }
    int solve(int num)
    {
        memset(a,0,sizeof(a));          
        int pos=0;
        while(num)
        {
            a[pos++]=num%10;
            num/=10;
        }
        return dfs(pos-1,0,true,0);//刚开始的时候一定有边界
    }
    int main()
    {
        int n,m;
        while(cin>>n>>m&&n+m)
        {
            memset(dp,-1,sizeof(dp));
            cout<<solve(m)-solve(n-1)<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    团队冲刺0202
    团队冲刺0201
    第十五周
    第十四周博客
    十三周总结
    软件设计模式13
    软件设计模式12
    软件构造4
    软件设计模式11
    软件设计模式10
  • 原文地址:https://www.cnblogs.com/Aya-Uchida/p/11219802.html
Copyright © 2011-2022 走看看