C ++返回最少许多递归调用的最佳方法
Posted
技术标签:
【中文标题】C ++返回最少许多递归调用的最佳方法【英文标题】:C++ best way to return minimum of many recursive calls 【发布时间】:2019-12-11 06:17:52 【问题描述】:我正在尝试通过递归调用解决动态编程问题。 dp[i][j]
应等于dp[i-1][j], dp[i-1][j-1], dp[i-1][j+1]
的最小值。但我只能对 2 个变量或一个向量使用 c++ 最小函数。我不想把我的结果推到一个向量上,所以我问我能解决这个问题的最好方法是什么。这是代码
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];
【问题讨论】:
简单嵌套min(min(a,b),min(c,d))
有什么问题吗?
【参考方案1】:
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))
【讨论】:
谢谢这是一个很好的答案,但我认为visual studio 2012编译器不支持initializer_list,还有其他方法吗? 您可以编写自己的函数来接受 3 个参数。或者使用 C 风格的数组和std::min_element
。【参考方案2】:
你可以做 min(dpF(A,dp,i-1,j-1),min(dpF(A,dp,i-1,j),dpF(A,dp,i-1,j+ 1));
【讨论】:
欢迎来到***。为了改进这个答案,您是否可以对其进行编辑以包含对您的解决方案的简要描述,并将code formatting
用于您的代码 sn-ps?以上是关于C ++返回最少许多递归调用的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章