【发布时间】:2012-07-02 09:19:14
【问题描述】:
我们要找到这个系列的第n个词http://oeis.org/A028859
n
答案应该是模 1000000007
我已经写了代码,但是当 n a 是巨大的数字时超过了时间限制。
#include<iostream>
using namespace std
int main()
{
long long int n;
cin>>n;
long long int a,b,c;
a=1;
b=3;
int i;
for(i=3;i<=n;i++)
{
c=(2ll*(a+b))%1000000007;
a=b;
b=c;
}
cout<<c;
}
【问题讨论】:
-
有没有机会粘贴比这个更干净的代码示例,使用适当的缩进并避免过多的空白?
-
这和动态规划有什么关系?
-
两个简单的优化——你可以开始为循环中的每个迭代执行三个步骤,没有副本,执行 "c=2(a+b)..." "b=2(c +a)..." "a=2(b+c)...".然后,您也可以在第一步中在 c 上每个循环仅执行一次 mod。这应该是你的速度的两倍以上。
-
?对不起老兄,你误解了DP的意思。 Dp 是关于存储计算值以便在将来的计算中使用它们,而不必再次计算它们。