题目给的暴力搜索肯定是超时代码,因为每次递归都会用重复运算。
那么如何解决重复运算呢?那就把算过的值存起来就好啦。
这里用迭代的方法写了,递归也一样。
注意每一步都要取余
#include <stdio.h>
#include <string.h>
#include <limits.h>
int a, b, c, d, e, f;
int dp[10000+5];
int main() {
int n, caseno = 0, cases;
scanf("%d", &cases);
while( cases-- ) {
int i;
scanf("%d %d %d %d %d %d %d", &a, &b, &c, &d, &e, &f, &n);
/* for(i=0;i<n;i++)
{
dp[i] = -INT_MAX-1;
}*/
dp[0]=a;
dp[1]=b;
dp[2]=c;
dp[3]=d;
dp[4]=e;
dp[5]=f;
for(i=6;i<=n;i++)
{
dp[i]=dp[i-1]% 10000007 + dp[i-2] % 10000007+ dp[i-3]% 10000007+ dp[i-4] % 10000007+ dp[i-5] % 10000007+dp[i-6]% 10000007;
}
printf("Case %d: %d\n", ++caseno, dp[n] % 10000007);
}
return 0;
}