| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这是我的源代码,但是运行超时,请高手帮忙改一下。#include <iostream>
#include <math.h>
using namespace std;
long factorial(int n)
{
int i;
long result = 1;
for (i=1; i<=n; i++)
result *= i;
return result;
}
long C(int n, int m)
{
return factorial(n) / factorial(m) / factorial(n-m);
}
long f(int n)
{
if (n==1 || n==2)
return 1;
if (n==3)
return 4;
int m = C(n, 2);
int p = pow(2, m);
long result = p;
int i;
for (i=1; i<n; i++) //递归
{
result -= C(n, i)*f(i);
}
return result;
}
int main()
{
int n;
cin>>n;
long result;
while (n!=0)
{
result = f(n);
cout<<result<<endl;
cin>>n;
}
return 0;
}
主要是中间的递归如何改成递推式不会。
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator