Gym 100090D Insomnia

从 n 变到 1,有多少种方案?

打表记忆化。

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int n;
 6 int dp[1000005];
 7 int dfs(int n) {
 8     if(n==1)
 9         return 1;
10     if(dp[n]>0)
11         return dp[n];
12     int cnt=0;
13     for(int i=2;i<=n;i++) {
14         if(n%i==0)
15             cnt+=dfs(n/i);
16     }
17     return dp[n]=cnt;
18 }
19 
20 int main()
21 {
22     memset(dp,0,sizeof(dp));
23     scanf("%d",&n);
24     printf("%d
",dfs(n));
25 
26     return 0;
27 }
View Code
原文地址:https://www.cnblogs.com/TreeDream/p/6686863.html