首页 > 其他 > 详细

CF414B Mashmokh and ACM

时间:2017-07-30 16:49:44      阅读:300      评论:0      收藏:0      [点我收藏+]

思路:

dp。

实现:

1.O(n5/2)

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 const int MOD = 1e9 + 7;
 6 
 7 int n, k, dp[2005][2005];
 8 
 9 int solve()
10 {
11     for (int i = 1; i <= n; i++) dp[0][i] = 1;
12     for (int i = 1; i < k; i++)
13     {
14         for (int j = 1; j <= n; j++)
15         {
16             for (int p = 1; p * p <= j; p++)
17             {
18                 if (j % p == 0) 
19                 {
20                     dp[i][j] = (dp[i][j] + dp[i - 1][p]) % MOD;
21                     if (p * p != j) dp[i][j] = (dp[i][j] + dp[i - 1][j / p]) % MOD;
22                 }
23             }
24         }
25     }
26     int sum = 0;
27     for (int i = 1; i <= n; i++) sum = (sum + dp[k - 1][i]) % MOD;
28     return sum;
29 }
30 
31 int main()
32 {
33     cin >> n >> k;
34     cout << solve() << endl;
35     return 0;
36 }

2.O(n2log(n))

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 const int MOD = 1e9 + 7;
 6 
 7 int n, k, dp[2005][2005];
 8 
 9 int solve()
10 {
11     for (int i = 1; i <= n; i++) dp[0][i] = 1;
12     for (int i = 1; i < k; i++)
13     {
14         for (int j = 1; j <= n; j++)
15         {
16             for (int p = j; p <= n; p += j)
17             {
18                 dp[i][p] = (dp[i][p] + dp[i - 1][j]) % MOD;
19             }
20         }
21     }
22     int sum = 0;
23     for (int i = 1; i <= n; i++) sum = (sum + dp[k - 1][i]) % MOD;
24     return sum;
25 }
26 
27 int main()
28 {
29     cin >> n >> k;
30     cout << solve() << endl;
31     return 0;
32 }

 

CF414B Mashmokh and ACM

原文:http://www.cnblogs.com/wangyiming/p/7259260.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!