私はこの問題を解決しようとしています:TRT。 ここまで私がこれまで行ってきたことは次のとおりです。 解決策を受け入れるために、問題の再帰を設計してメモを使用しました。この再帰を反復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