√ 1537 序列的混乱程度 368 637
√  1538 随机数 264 357
 √··· 1539 完美序列 DP 13 62
 √··· 1540 第k大数 二分/经典 54 446
 √ 1541 选房子 305 341
  1542 Game 3 20
 √ 1543 Numbers 二进制/因子 76 334
 √··· 1544 Counting Words stringstream流类输入/字符串操作 250 465
 
1544-stringstream

 【1544分析】:(参考https://zhuanlan.zhihu.com/p/26063938)

  • 我们的思想是每次读取一行,然后再扫描该行的字符,同时计算结果。如果使用getchar( )边读边算,虽然代码较短,但容易写错,并且相对较难理解;
  • 可以把string作为流进行读写,定义在sstream头文件中。虽然string和sstream都很方便,但string很慢,sstream更慢,应谨慎使用
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2000 + 5;
const ll MOD = 1e9 + 7;

ll dp[maxn][maxn];

ll dfs(int x,int k) {
    if(k==1||x==1)
        return 1;
    if(dp[x][k]!=-1)
        return dp[x][k];
    ll rtn = 0;
    int lim = sqrt(x);
    for(int i=1;i<=lim;i++) if(x%i==0){
        rtn += dfs(i, k-1);
        if(i!=x/i) rtn += dfs(x/i,k-1);
    }
    return dp[x][k] = rtn%MOD;
}

int main() {
    int n, l, T;
    scanf("%d", &T);
    memset(dp,-1,sizeof(dp));
    while(T--) {
        scanf("%d%d",&n,&l);
        ll ans = 0;
        for(int i=1;i<=n;i++)
            (ans += dfs(i,l)) %= MOD;
        cout << ans << endl;
    }
    return 0;
} 
1539-记忆化

相关文章: