DP
dp[j][i]代表以j为末尾,i为长度的序列个数
那么
dp[j的1倍2倍3倍4倍...][i+1]+=dp[j][i]
初始化情况为
所有的
dp[i][1]置为1
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
const int MOD=1000000007;
using namespace std;
int dp[2222][2222];
int main()
{
#ifndef ONLINE_JUDGE
freopen("G:/1.txt","r",stdin);
//freopen("G:/2.txt","w",stdout);
#endif
int N,K;
scanf("%d%d",&N,&K);
for(int i=1;i<=N;i++)
dp[i][1]=1;
//dp[1][1]=1;
for(int j=1;j<=N;j++)
{
for(int i=1;i<=K;i++)
{
for(int p=j;p<=N;p+=j)
{
dp[p][i+1]+=dp[j][i];
dp[p][i+1]%=MOD;
}
}
}
int ans=0;
for(int i=1;i<=N;i++)
{
ans+=dp[i][K];
ans%=MOD;
}
printf("%d\n",ans);
}