CodeForces 414B

给你长度为 的整数数列b1, b2, ..., bl(1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n)

如果这个数列被称为好的,那么每个元素都可以整除下一个元素

给你n和k,去找到长度为k的好数列的个数

dp[任意i][1] = 1;

dp[i的倍数][长度k] = sum( 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
",sum);
29 }
我自倾杯,君且随意
原文地址:https://www.cnblogs.com/nicetomeetu/p/5701573.html