fzu 2037 Maximum Value Problem

http://acm.fzu.edu.cn/problem.php?pid=2037

思路:找规律,找出递推公式f[n]=f[n-1]*n+(n-1)!,另一个的结果也是一个递推,s[n]=s[n-1]+1/n;

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 1000010
 5 #define ll long long
 6 using namespace std;
 7 const int mod=1000000007;
 8 
 9 ll f[maxn];
10 int t;
11 ll n;
12 ll h[maxn];
13 double ans[maxn];
14 
15 void inti()
16 {
17     h[0]=1;
18     h[1]=1;
19     ans[1]=1.0;
20     for(int i=2; i<=maxn; i++)
21     {
22         ans[i]=ans[i-1]+1.0/i;
23         h[i]=h[i-1]*i;
24         h[i]%=mod;
25     }
26     f[1]=1;
27     for(int i=2; i<=maxn; i++)
28     {
29          f[i]=(f[i-1]*i+h[i-1])%mod;
30     }
31 }
32 
33 int main()
34 {
35     inti();
36     scanf("%d",&t);
37     for(int cas=1; cas<=t; cas++)
38     {
39         scanf("%lld",&n);
40         printf("Case %d: %I64d %.6lf\n",cas,f[n],ans[n]);
41     }
42     return 0;
43 }
View Code

 

posted @ 2015-03-30 11:11  null1019  阅读(126)  评论(0编辑  收藏  举报