Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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++ 为什么我的程序在大输入时失败?超过10^5_C++_Performance_Optimization_Dynamic Programming - Fatal编程技术网

C++ 为什么我的程序在大输入时失败?超过10^5

C++ 为什么我的程序在大输入时失败?超过10^5,c++,performance,optimization,dynamic-programming,C++,Performance,Optimization,Dynamic Programming,我正在学习动态规划。我试图解决以下问题: 问题介绍: 您将获得一个基本计算器,它可以使用当前数字执行以下三个操作 x:将x乘以2,将x乘以3,或将1与x相加。您的目标是给定一个正整数n,从数字1开始找到获得数字n所需的最小操作数 任务 给定一个整数n,计算获得该数n所需的最小操作数 从1号开始。 输入由单个整数1的值,然后你正在做(min步骤[i/2 ] < min步骤[i])< /> >和 min步骤[2 ]。未定义。什么是std::list path[number+1]?@Shravan40

我正在学习动态规划。我试图解决以下问题:

问题介绍: 您将获得一个基本计算器,它可以使用当前数字执行以下三个操作 x:将x乘以2,将x乘以3,或将1与x相加。您的目标是给定一个正整数n,从数字1开始找到获得数字n所需的最小操作数

任务 给定一个整数n,计算获得该数n所需的最小操作数 从1号开始。 输入由单个整数1 代码

#include <iostream>
#include <climits>
#include<vector>
#include<list>
void primitive_calculator(int number)
{
    std::vector<int> min_steps(number+1,INT_MAX);
    std::list<int> path[number+1];
    min_steps[0]=0; min_steps[1]=0;
    path[0].push_back(0);
    path[1].push_back(1);
    for (int i=2 ; i<=number ; i++)
    {
        if(i%3==0)
        {
            if(min_steps[i/3] < min_steps[i])
            {
                min_steps[i]=min_steps[i/3]+1;
                path[i]=path[i/3];
                path[i].push_back(i);
            }
        }
        if(i%2==0)
        {
            if( min_steps[i/2] < min_steps[i])
            {
                min_steps[i]=min_steps[i/2]+1;
                path[i]=path[i/2];
                path[i].push_back(i);
            }
        }

        if( min_steps[i-1] < min_steps[i])
        {
             min_steps[i]=min_steps[i-1]+1;
             path[i]=path[i-1];
             path[i].push_back(i);
        }
    }
    std::cout<<min_steps[number]<<"\n";
    while(!path[number].empty())
    {
        std::cout<<path[number].front()<<" ";
        path[number].pop_front();
    }

}
int main()
{
    int number;
    std::cin>>number;
    primitive_calculator(number);
    return 0;
}
#包括
#包括
#包括
#包括
无效原语_计算器(整数)
{
标准::向量最小步数(数字+1,整数最大);
std::列表路径[number+1];
最小步数[0]=0;最小步数[1]=0;
路径[0]。推回(0);
路径[1]。推回(1);
对于(int i=2;i您的问题在线:

std::list<int> path[number+1];

你的问题解决了。< / P>可能是由于数据类型int。尝试使用长int或long long int来获得更大的数字!我不知道,为什么你的程序甚至工作在小于10 ^ 5的值上。考虑<代码> i=2 < /代码>的值,然后你正在做<代码>(min步骤[i/2 ] < min步骤[i])< /> >和<代码> min步骤[2 ]。

未定义。什么是
std::list path[number+1]
?@Shravan40 std::vector min\u steps(number+1,INT\u MAX);创建一个大小为(number+1)的向量并初始化为INT\u MAX。@Mine std::list path[number+1]…它是一个列表数组?我将保存此列表中每个数字的路径。因此(number+1)列表的大小与path[10]类似将存储到达数字10的路径,即{1,3,9,10}。您能建议其他方法吗?更好?
std::vector<std::list<int>> path(number+1);