Dynamic programming 如何将递归DP解决方案转换为迭代DP?

Dynamic programming 如何将递归DP解决方案转换为迭代DP?,dynamic-programming,iteration,Dynamic Programming,Iteration,假设我有一个词“沙拉”。我必须找出一些方法,我可以删除这个词的字母,使它成为回文。由于删除字母的顺序不同,有两种方式被认为是相同的。“沙拉”的答案是15 我已经用递归DP解决了这个问题 string S; int DP[65][65]; int DFS(int l, int r) { if(l==r) return 1; if(l>r) return 0; if(DP[l][r]!=-1) return DP[l][r]; DP[l][r]=0;

假设我有一个词“沙拉”。我必须找出一些方法,我可以删除这个词的字母,使它成为回文。由于删除字母的顺序不同,有两种方式被认为是相同的。“沙拉”的答案是15

我已经用递归DP解决了这个问题

string S;
int DP[65][65];

int DFS(int l, int r)
{
    if(l==r) return 1;
    if(l>r) return 0;

    if(DP[l][r]!=-1) return DP[l][r];

    DP[l][r]=0;

    if(S[l]==S[r])
    {
       return DP[l][r] = 1 + DFS(l+1, r) + DFS(l, r-1);
    }
    else
    {
       return DP[l][r] = DFS(l+1, r) + DFS(l, r-1) - DFS(l+1, r-1);
    }
}

int main()
{
    S = "SALADS";
    DFS(0, S.size()-1);
}
如何使用迭代DP解决此问题?

试试这个->
也许这会起作用:

long long dp[MAX][MAX];
long long solve(string str)
{
    int n = str.size();
    int i, j;
    memset(dp,0,sizeof(dp));

    for(i=n; i>0; i--)
        for(j=i; j<=n; j++)
            dp[i][j]=(str[i-1]==str[j-1] ? 1+dp[i+1][j]+dp[i][j-1] : dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]);

    return dp[1][n];
}
long-long-dp[MAX][MAX];
长-长求解(字符串str)
{
int n=str.size();
int i,j;
memset(dp,0,sizeof(dp));
对于(i=n;i>0;i--)
对于(j=i;j