题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005
题目大意:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给定 A, B, n, 求 f(n).
//C++代码
#include<iostream>
using namespace std;
int main(){
int a,b,n;
while(cin>>a>>b>>n,a||b||n){
a%=7,b%=7;
int p=1,q=1,i,k,l,num,t[55];
int s[7][7]={0};
for(i=1;i<=50;i++){
t[i]=p;
if(s[p][q]==0){
s[p][q]=i;
num=(q*a+p*b)%7;
p=q;
q=num;
}
else{
k=i-s[p][q];
l=i-1;
break;
}
}
n-=(n-l)/k*k;
if(n>l) n-=k;
cout<<t[n]<<endl;
}
return 0;
}
本文提供了一道经典的动态规划题目解答,题目编号为HDU 1005,通过C++代码实现。该题要求计算一个递推数列的第n项值,使用了模运算来解决数值溢出的问题,并通过查找周期性规律来优化计算过程。
6082

被折叠的 条评论
为什么被折叠?



