1 #include2 #include 3 #include 4 #include 5 #define mod 1000000007 6 long long dp[1010]; 7 void getdp() 8 { 9 memset(dp,0,sizeof(dp));10 dp[1]=1;11 for(int i=2;i<=1000;i++)12 {13 for(int j=1;j<=i;j++)14 {15 if ((i-1)%j==0) dp[i]+=dp[j],dp[i]=dp[i]%mod;16 }17 }18 return;19 }20 int main()21 {22 getdp();23 int cas=0;24 int n;25 while(~scanf("%d",&n))26 {27 cas++;28 printf("Case %d: %I64d\n",cas,dp[n]);29 }30 return 0;31 }
这是参考别人的思路,但是题目的思想很好,不舍得不写出来,附一篇好题解: