为什么我的dp方法不适用于某些输入?

时间:2017-10-16 18:38:09

标签: c++ dynamic-programming

#include<stdio.h>
#include<iostream>
using namespace std;
#define MAX 10006
long long int dp[MAX];

long long int a, b, c, d, e, f;
long long int fn(long long int n ) {
    if(dp[n]!=-1) return dp[n];
    else{
    dp[n]= (fn(n-1) + fn(n-2) + fn(n-3) + fn(n-4) + fn(n-5) + fn(n-6))%10000007 ; //Recursive Calls 
    return dp[n];
    }
}
int main() {
    long long int  n, caseno = 0, cases;
    cin>>cases;
    while(cases--){

for(int i=0;i<MAX;i++)
            {
                dp[i]=-1; //Dp table Initiailization 
            }
        cin>>dp[0]>>dp[1]>>dp[2]>>dp[3]>>dp[4]>>dp[5]>>n;
        cout<<"Case "<<++caseno<<": "<<fn(n)%10000007<<endl;

    }
    return 0;
}

示例输入:

1 9999 9999 9999 9999 9999 9999 9999

对于这个输入我没有得到任何输出。它会占用我所有的cpu资源......为什么?

1 个答案:

答案 0 :(得分:0)

这就是事情:

执行第一个测试用例后,您在-1数组中将所有值设置为dp。尝试在调用递归函数fn之前移动数组初始化循环。

当然,正如其他人指出的那样,如果您有一个输入案例,那么您的输入应该以{{1​​}}开头,而不是1

样本输入:

1 9999 9999 9999 9999 9999 9999 9999

9999

这肯定会产生输出,但我不确定它是否是预期的输出。