CF414B
这道题dp状态表示需要一点思维,而且会卡到时间复杂度
之前题主用的是试除法,时间复杂度为n^2.5,然后被卡了,但是换一种写法就是对的
#include <iostream>
#include <utility>
using namespace std;
typedef long long ll;
#define fi(i, a, b) for (int i = a; i <= b; ++i)
#define fr(i, a, b) for (int i = a; i >= b; --i)
#define x first
#define y second
#define sz(x) ((int)(x).size())
#define pb push_back
using pii = pair<int, int>;
#define int long long
//#define DEBUG
int dp[2005][2005];
const int N = 1e9 + 7;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
fi(i, 1, n) dp[1][i] = 1;
fi(i, 2, m)
{
fi(j, 1, n)
{
for (int k = 1; k * j <= n; k++)
{
dp[i][j] += dp[i - 1][k * j];
dp[i][j] %= N;
}
}
}
int ans = 0;
fi(i, 1, n)
{
ans += dp[m][i];
ans %= N;
}
cout << ans << endl;
#ifdef DEBUG
//freopen(D:\in.txt,r,stdin);
#endif
return 0;
}