1
我想解决这个问题:TRT。 这是我迄今为止所做的: 我为给定的问题设计了一个递归,并使用memoization来接受解决方案。如何将此递归转换为迭代DP?
int recur(int l,int r,int level)
{
if(l==r)
return level*a[l];
if(dp[l][r])
return dp[l][r];
return dp[l][r]=max(level*a[l]+recur(l+1,r,level+1),level*a[r]+recur(l,r-1,level+1));
}
我试图解决由底向上的动态规划这个问题,但我想不出办法的,出现这种情况与大多数的我解决了动态规划的问题,我能设计递归但在构建迭代dp时失败。一旦我找到了递归,有人可以帮助我解决迭代dp解决方案吗?
编辑:基于Tempux的解释我的自下而上DP解决方案:
int solve()
{
REP(i,n)
{
dp[i][i]=n*a[i];
}
REPP(i,1,n)
{
for(int j=0;j+i<n;j++)
{
dp[j][j+i]=max((n-i)*a[j]+dp[j+1][j+i],(n-i)*a[j+i]+dp[j][j+i-1]);
}
}
return dp[0][n-1];
}
感谢很多更详细的答案,它实际上帮了我很多。我编辑了这个问题,并根据您的解释添加了我设计的解决方案。 – Pranay
@Pranay很高兴它有帮助。动态编程在开始时对我来说也非常困难。 – Tempux