zoukankan      html  css  js  c++  java
  • HDU 2089

    算是数位dp的入门吧

    求n到m之间数字中没有4和62(连着)的个数

    #include <algorithm>
    #include <iostream>
    using namespace std;
     
    int dp[10][10];
     
    void init(){
        dp[0][0] = 1;//dp[0][1-9] = 1都可以
        for(int i = 1; i <= 8; i++)
            for(int j = 0; j < 10; j++)//i位
                for(int k = 0; k < 10; k++)//i-1位
                   if(j != 4 && !(j == 6 && k == 2))
                            dp[i][j] += dp[i-1][k];
    }
     
    int solve(int n){
        int d[10];
        int len = 0;
     
        while(n > 0){//数组保存 
            d[++len] = n%10;
            n /= 10;
        }
     
        d[len + 1] = 0;
     
        int ans = 0;
     
        for(int i = len; i >= 1; i--){
            
            for(int j = 0; j < d[i]; j++){
                if(j != 4 && !(d[i+1] == 6 && j == 2)) ans += dp[i][j];//求和 
            }
            
            if(d[i] == 4 || (d[i] == 2 && d[i+1] == 6)) break;//判出 
     
        }
     
        return ans;
    }
     
    int main()
    {
    
        int r, l;
        init();
        while(cin>>l>>r){
            if(r + l == 0) break;
     
            cout<<solve(r+1) - solve(l)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Best code水题之路
    我的CodeF水A题之路
    studing(来自转载)
    BFS
    fibonacci数列(五种)
    Redis阻塞队列原理学习
    the enum hack
    Divide Two Integers
    Surrounded Regions
    Search in Rotated Sorted Array
  • 原文地址:https://www.cnblogs.com/wpbing/p/9508739.html
Copyright © 2011-2022 走看看