我的uva 10739动态编程解决方案有什么问题?

时间:2017-04-03 18:52:32

标签: recursion dynamic-programming

我在uva上解决this问题。我发现了递归关系,它对于给定的测试用例非常有效。但是,没有记忆,它超过了时间限制。我缓存了值并返回了缓存(基本的memoization)。通过缓存,我得到的答案比最后两个测试用例的实际答案多1个。我无法理解可能是什么错误,因为如果你拿出缓存它会起作用。谢谢你的帮助。

代码:

#include<iostream>
using namespace std;

    string a;
    int n;
    int dp[1005][1005];

        int solve(int i, int j, int moves)
            {
                if(j<=i)
                    return dp[i][j] = moves;

                if(dp[i][j]!=-1)
                return dp[i][j];

                if(a[i]==a[j])
                    return dp[i][j] = solve(i+1, j-1, moves);
                else
                    return dp[i][j] = min(min(solve(i+1, j-1, moves+1), solve(i+1, j, moves+1)), solve(i, j-1, moves+1));
        }

    int main()
        {
            int T;
            cin >> T;
            while(T--)
            {
                cin >> a;
                n = a.length();
                memset(dp, -1, sizeof(dp));
                int ans = solve(0, n-1, 0);
                cout << ans << "\n";
            }
        }

预期的O / P: sadrulhabibchowdhury:8

我的输出:9

0 个答案:

没有答案