直接用递归生成会导致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; }