C++ 动态问题求解中的分段错误
在动力学问题中,这些类型的ans计算有什么不同吗?因为在代码3的情况下,当代码1和代码2通过时,我得到了分段错误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=
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
- 返回新值
ans
与dp[pos][ba]
相同
三是
- 重现
- 重现
- 更新
并返回新值dp