给你长度为 l 的整数数列b1, b2, ..., bl(1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n)
如果这个数列被称为好的,那么每个元素都可以整除下一个元素
给你n和k,去找到长度为k的好数列的个数
dp[任意i][1] = 1;
dp[i的倍数][长度k] = dp[i][长度k-1] + 1;
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int MOD = 1000000007 ; 5 int n,k; 6 long long dp[2005][2005]={0}; 7 int main() 8 { 9 scanf("%d%d",&n,&k); 10 for(int i = 1;i <= n; i++) 11 { 12 dp[i][1] = 1; 13 for(int j = i;j<=n; j+= i) 14 { 15 for(int v = 2 ;v<=k;v++) 16 { 17 dp[j][v] +=dp[i][v-1]; 18 if(dp[j][v]>=MOD) dp[j][v] -= MOD; 19 } 20 } 21 } 22 long long sum=0; 23 for(int i = 1;i <= n ; i++) 24 { 25 sum += dp[i][k]; 26 if(sum>MOD) sum -= MOD; 27 } 28 printf("%I64d\n",sum); 29 }
时间: 2024-12-16 23:48:43