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