美团笔试9.2

分享一下第四题的方法

没参加这场赛后听的描述写的 不保证正确但是复杂度应该是n^2loglog的

先对数组排序然后dp

dp[i][j]表示第i个数字长度为j的符合题意的串有多少个

那么dp[i][j] = dp[k][j-1]对每个满足a[k]%a[i]==0的k求和

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN = 1e3 + 10;
const int MOD = 1e9+7;
int a[MAXN];
ll dp[MAXN][MAXN];
map<int, ll> mp;
int main() {
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    int len = n-k;
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++){
        dp[i][1] = 1;
        mp[i] = 1;
    }
    for(int j=2;j<=len;j++){
        for(int i=n;i>=1;i--){
            for(int k = 2*a[i];k <= a[n];k+=a[i]){
                if(mp.find(k)!=mp.end()){
                    dp[i][j] = (dp[i][j] + mp[k])%MOD;
                }
            }
        }
        mp.clear();
        for(int i=1;i<=n;i++){
            mp[i] = dp[i][j];
        }
    }
    ll ans = 0;
    for(int i=1;i<=n;i++){
        ans = (ans + dp[i][len])%MOD;
    }
    printf("%lld\n",ans);
    return 0;
}

全部评论

相关推荐

02-16 01:39
南昌大学 Java
重剑Ds:感觉不太可能 后端都减飞了 根本不缺人
点赞 评论 收藏
分享
03-01 21:45
中北大学 Python
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈
开工第一帖
点赞 评论 收藏
分享
评论
3
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务