正题
大意
好序列的定义为每一个数是前面一个数的倍数。求1到n里长度为k的好序列的个数
解题思路
f[i][j]f[i][j]表示第i位数为j的最优解,然后动态转移方程
f[i+1][j∗k]=f[i][j]+f[i+1][j∗k]f[i+1][j∗k]=f[i][j]+f[i+1][j∗k]
代码
#include<cstdio>
#define p 1000000007
using namespace std;
int n,k,s,f[2001][2001];
int main()
{scanf("%d%d",&n,&k);for (int i=1;i<=n;i++) f[1][i]=1;for (int i=1;i<k;i++)for (int j=1;j<=n;j++)for (int q=1;q<=n/j;q++)f[i+1][q*j]=(f[i+1][q*j]+f[i][j])%p;for (int i=1;i<=n;i++) s=(s+f[k][i])%p;printf("%d",s);
}