zoukankan      html  css  js  c++  java
  • HDU 2089 不要62 (数位DP)

    ①递归实现

    #include<iostream>
    #include<cstring>
    #define ll long long
    using namespace std;
    int dp[15][10],digit[15];
    void init(){
        memset(dp,0,sizeof(dp));
        dp[0][0]=1;
        for(int i=1;i<=7;i++){
            for(int j=0;j<=9;j++){
                for(int k=0;k<=9;k++){
                    if (j != 4 && !(j == 6 && k == 2))
                        dp[i][j]+=dp[i-1][k];
                }
            }
        }
        /*for(int i=0;i<=9;i++){
            for(int j=0;j<=9;j++){
                cout<<dp[i][j]<<' ';
            }
            cout<<endl;
        }*/
    }
    
    int solve(int x){
        memset(digit,0,sizeof(0));
        int cnt=0,tmp=x;
        while(tmp){
            digit[++cnt]=tmp%10;
            tmp/=10;
        }
        digit[cnt+1]=0;
        int ans=0;
        for(int i=cnt;i>=1;i--){//从高位向地位;
            for(int j=0;j<digit[i];j++)//由于j<digit[i],所以到最后一位时直接跳过了(即没有判断x),因此后面是m+1和n
                if(digit[i+1]!=6||j!=2)
                    ans+=dp[i][j];
            if(digit[i]==4||(digit[i+1]==6&&digit[i]==2))//遇到4或者62直接结束循环;
                break;
        }
        return ans;
    }
    
    int n,m;
    
    int main(){
        init();
        while(cin>>n>>m){
            if(!n&&!m) break;
            cout<<solve(m+1)-solve(n)<<endl;//不是solve(m)-solve(n-1);
        }
        return 0;
    }
  • 相关阅读:
    乱七八糟的
    C# 获取客户端电脑MAC 地址
    CheckInput
    gridview 合计行实现
    乱七八糟22
    jQuery UI CSS Framework
    CSS float和CSS clear
    smtp,POP3,IMAP
    960GridSystem
    CSS 清除浮动
  • 原文地址:https://www.cnblogs.com/xuanzo/p/13332175.html
Copyright © 2011-2022 走看看