414B. Mashmokh and ACM:题目
1400分就进入经典dp了
题意:给你1-n的数,构造一个长度为k的串,后一个数能整除前一个数
#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<int> a((int)6e5);
vector<int> b((int)6e5), c((int)6e5);
const int mod = 1e9 + 7;
signed main()
{
int n, k;
cin >> n >> k;
vector<int> d(2002);
for (int i = 1; i <= n; i++)
d[i] = 1;
for (int h = 1; h < k; h++)
{
vector<int> dp(2002);
for (int i = 1; i <= n; i++)
dp[i] = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j * i <= n; j++)
{
dp[j * i] += d[i];
dp[j * i] %= mod;
}
}
swap(dp, d);
}
int res = 0;
for (int i = 1; i <= n; i++)
res = (res + d[i]) % mod;
cout << res << endl;
}