直接用递归生成会导致A(n-1)和A(n)进行两次独立计算从而超时
借鉴动态规划中的缓存数组,让每个结果只算一次
#include<iostream>
using namespace std;
int An(int a0,int a1,int p,int q,int n){
int* A = (int*)malloc(sizeof(int)*(n+1));//还有A0
A[0] = a0;
A[1] = a1;
for(int i=2;i<=n;i++){
A[i] = (p*A[i-1]%10000+q*A[i-2]%10000)%10000;
}
return A[n];
}
int main(){//习题6.11 清华大学 递推数列
int a0,a1,p,q,k;
while(cin>>a0>>a1>>p>>q>>k){
cout<<An(a0,a1,p,q,k)<<endl;
}
return 0;
}

京公网安备 11010502036488号