C++ 动态问题求解中的分段错误

C++ 动态问题求解中的分段错误,c++,recursion,segmentation-fault,overflow,dynamic-programming,C++,Recursion,Segmentation Fault,Overflow,Dynamic Programming,在动力学问题中,这些类型的ans计算有什么不同吗?因为在代码3的情况下,当代码1和代码2通过时,我得到了分段错误 int dp[8005][2];//dp is initialized as -1 in main int a=4; int b=6; int tar=90; int solve(int pos,int ba) { if(pos<0||pos>8000||ba>=2) return 1e6+1; if(pos=

在动力学问题中,这些类型的ans计算有什么不同吗?因为在代码3的情况下,当代码1和代码2通过时,我得到了分段错误

int dp[8005][2];//dp is initialized as -1 in main
int a=4;
int b=6;
int tar=90;


int solve(int pos,int ba)
{
    
    if(pos<0||pos>8000||ba>=2)
        return 1e6+1;
    
    if(pos==tar)
        return 0;

    //Code 1
    int &ans=dp[pos][ba];
    if(ans!=-1)
       return dp[pos][ba];
    ans=1+solve(pos+a,0);
    ans=min(ans,1+solve(pos-b,ba+1));
    return ans;

    //Code 2
    if(dp[pos][ba]!=-1)
       return dp[pos][ba];
      dp[pos][ba]=1+solve(pos+a,0);
        dp[pos][ba]=min(dp[pos][ba],1+solve(pos-b,ba+1));
        return dp[pos][ba]; 
    
    //Code 3
  if(dp[pos][ba]!=-1)
       return dp[pos][ba];
   int ans=1+solve(pos+a,0);
    ans=min(ans,1+solve(pos-b,ba+1));
    return dp[pos][ba]=ans;
}
int-dp[8005][2]//dp在main中初始化为-1
INTA=4;
int b=6;
int tar=90;
整数解算(整数位置,整数ba)
{
如果(pos8000 | | ba>=2)
返回1e6+1;
如果(位置==焦油)
返回0;
//代码1
int&ans=dp[pos][ba];
如果(ans!=-1)
返回dp[pos][ba];
ans=1+求解(位置+a,0);
ans=min(ans,1+solve(位置b,ba+1));
返回ans;
//代码2
如果(dp[pos][ba]!=-1)
返回dp[pos][ba];
dp[pos][ba]=1+solve(pos+a,0);
dp[pos][ba]=min(dp[pos][ba],1+solve(pos-b,ba+1));
返回dp[pos][ba];
//代码3
如果(dp[pos][ba]!=-1)
返回dp[pos][ba];
int ans=1+求解(位置+a,0);
ans=min(ans,1+solve(位置b,ba+1));
返回dp[pos][ba]=ans;
}

在完成所有计算之前,代码3不会更新
dp

前两个去

  • 重现
  • 更新
    dp
  • 重现
  • 更新
    dp
  • 返回新值
请注意,1和2是等效的,因为
ans
dp[pos][ba]
相同

三是

  • 重现
  • 重现
  • 更新
    dp
    并返回新值

我实际上已经添加了基本案例。这是一个无休止的递归吗?