我正在尝试使用递归调用来解决动态规划问题。 dp[i][j]
应等于dp[i-1][j]、dp[i-1][j-1]、dp[i-1] 的最小值][j+1]
。但我只能对 2 个变量或 vector 使用 c++ 最小函数。我不想将我的结果推到 vector 中,所以我想问一下解决这个问题的最佳方法是什么。这是代码
int dpF(vector<vector<int>>& A, vector<vector<int>>dp,int i,int j)
{
if(i<0||i>=A.size()||j<0||j>A.size())
return 0;
if(dp[i][j]!=-1)
{
return dp[i][j];
}
dp[i][j]=A[i][j]+Math.min(dpF(A,dp,i-1,j-1),dpF(A,dp,i-1,j),dpF(A,dp,i-1,j+1)); //Here is the problem, I am trying to find an elegant way to return the minimum of these 3 values.
return dp[i][j];
}
最佳答案
std::min
提供接受 std::initializer_list
的重载。你可以这样做:
std::min({dpF(A,dp,i-1,j-1), dpF(A,dp,i-1,j), dpF(A,dp,i-1,j+1)})
关于C++ 返回许多递归调用中最小值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57329542/