• 2019年华南理工大学程序设计竞赛(春季赛)A NB群友


    https://ac.nowcoder.com/acm/contest/625/A

    题意:给出一个区间范围 , 求有多少个数的每一位的积是在这个区间里面的

    分析:没错了 ,就是记忆化暴力搜索 ,不断的枚举除 i ,i是2到9 , 看是否合法 ,  对于枚举到相同的状态的时候 , 后面的价值肯定和上一个状态是一样的 , 所以这样就好拉

    #include<bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    map<ll , ll >dp;
    const int mod = 1e9 + 7;
    ll dfs(ll x)
    {
        if(x<1) return 0;
        if(dp[x]) return dp[x];
        ll ans=0;
        for(int i=2 ; i<=9 ; i++)
        {
            ll now=x/i;
            if(now>=1) ans++;
            ans+=dfs(now);///累记记忆化搜索的值
            ans%=mod;
        }
       return dp[x]=ans;
    }
    
    int main() {
       int t; scanf("%d",&t);
    
       while(t--)
       {
           ll l ,r;scanf("%lld%lld",&l,&r);
           dp.clear();
           ll sum1 = dfs(r);
           dp.clear();
           ll sum2 =dfs(l-1);
           printf("%lld
    ",(sum1-sum2+mod)%mod);
       }
        return 0;
    }
    View Code
  • 相关阅读:
    蛇形填数
    A Famous Music Composer
    Java用筛子法求素数
    素数求和问题
    Java中数组的快排
    大数阶乘
    Binary String Matching
    括号配对问题
    Android Studio安装和使用
    Android Studio使用手册
  • 原文地址:https://www.cnblogs.com/shuaihui520/p/10712547.html
Copyright © 2020-2023  润新知