Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用线性时间编写代码作为dp问题的解决方案,但得到的答案不合逻辑_C++_Dynamic Programming - Fatal编程技术网

C++ 用线性时间编写代码作为dp问题的解决方案,但得到的答案不合逻辑

C++ 用线性时间编写代码作为dp问题的解决方案,但得到的答案不合逻辑,c++,dynamic-programming,C++,Dynamic Programming,我编写了以下代码来解决此问题: #包括 #包括 使用名称空间std; int main() { int n,k,x; cin>>n>>k>>x; 双a,b; 长整数回答[n-1]; 如果(x==1) 答案[1]=k-1; 其他的 答案[1]=k-2; 对于(int i=3;i这是因为溢出。基本上,您试图存储的数字太大,无法int处理。您可以使用long存储更大的数字,但即使是那些数字也有限制。我看到问题给出了一个数字,将其用作mod。您可以使用该数字通过修改来确保您的答案不会溢出你的答案超过了这

我编写了以下代码来解决此问题:

#包括
#包括
使用名称空间std;
int main()
{
int n,k,x;
cin>>n>>k>>x;
双a,b;
长整数回答[n-1];
如果(x==1)
答案[1]=k-1;
其他的
答案[1]=k-2;

对于(int i=3;i这是因为溢出。基本上,您试图存储的数字太大,无法
int
处理。您可以使用
long
存储更大的数字,但即使是那些数字也有限制。我看到问题给出了一个数字,将其用作mod。您可以使用该数字通过修改来确保您的答案不会溢出你的答案超过了这个数字。

这看起来是一个使用调试器的好地方。如果你接受一个小的输入,产生一个不正确的结果错误,然后用调试器逐步通过程序,监视每一行的行为,你应该能够发现程序何时出轨并开始产生不正确的结果。注意n从
double
转换回整数类型。由于浮点数固有的不精确性,结果可能会变得有点奇怪。为什么这个问题被否决了?据我所知,这是一个合理的问题。否决的一个原因是,它没有显示调试的迹象,而我只是尝试过对它进行调试urs。例如,您没有提供产生您希望解决的错误的输入数据集。如果没有复制错误的方法,您无法进行很多调试。Mahmood指出了一个错误。可能还有更多错误,他指出的可能不是您要查找的错误。@RameshAgarwal可能太晚了到那时,因为答案早就被破坏了。你必须在计算的每一步都保护数字不被溢出。我看不出你在哪里修改了10^9+7。也不要使用pow函数。它给出了不可靠的结果。实现你自己的pow函数。
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n,k,x;
    cin>>n>>k>>x;
    double a,b;
    long int answer[n-1];
    if (x == 1)
        answer[1] = k-1;
    else 
        answer[1] = k-2;
    for (int i=3;i<=n-1;i++)
    {
        a = k-1;
        b = i-1;
        answer[i-1] = pow(a,b)-answer[i-2];
    }

    cout<<answer[n-2]<<endl;


    return 0;
}