zoukankan      html  css  js  c++  java
  • 数位dp

    http://codeforces.com/gym/101193/problem/A

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    const ll mod=1e9+7;
    
    int n[55];
    int m[55];
    ll dp[55];
    
    ll dfs(int pos,bool lead,bool limit) {
        if(pos==-1) {
            return 1;
        }
        if(!limit && !lead && dp[pos]!=-1)
            return dp[pos];
    
        int up=limit?n[pos]:9;
        int down=m[pos];
        ll ans=0;
        for(int i=down; i<=up; i++) {
            //cout<<"pos="<<pos<<" i="<<i<<endl;
            ans+=dfs(pos-1,lead && i==0,limit && i==n[pos]);
            ans%=mod;
        }
        if(!limit && !lead){
            dp[pos]=ans;
        }
        return ans;
    }
    
    ll solve(string nn,string mm) {
        int ln=nn.length();
        int lm=mm.length();
    
        if(lm>ln)
            return 0;
    
        int pos=0;
    
        for(int i=0;i<ln;i++){
            n[i]=nn[ln-1-i]-'0';
    
            if(lm-1-i>=0)
                m[i]=mm[lm-1-i]-'0';
            else
                m[i]=0;
    
            //cout<<"n["<<i<<"]="<<n[i]<<endl;
            //cout<<"m["<<i<<"]="<<m[i]<<endl;
        }
    
        return dfs(ln-1,true,true);
    }
    
    int main() {
        //memset(dp,-1,sizeof(dp));
    
        string n,m;
        while(cin>>n>>m) {
            memset(dp,-1,sizeof(dp));
            printf("%lld
    ",solve(n,m));
        }
    }

    .

  • 相关阅读:
    链表的相关操作
    【回溯】旅行商问题
    【回溯】图的m着色问题
    奶牛卧室_待解决
    阶乘问题
    子数整数
    hihoCoder week4 Trie图
    hihoCoder week3 KMP算法
    hihoCoder week2 Trie树
    hihoCoder week1 最长回文子串
  • 原文地址:https://www.cnblogs.com/Yinku/p/10665405.html
Copyright © 2011-2022 走看看