Guess Number Higher or Lower II

题目来源
给数字n,猜数字1-n,猜错了就给猜错数字的钱,问最多多少钱能保证赢。
我一开始想着用二分来做?后来想想好像不对。
然后看了tags,用DP,但是没想到怎么DP。
看了下讨论区,result_when_pick_x = x + max{DP([i~x-1]), DP([x+1, j])}
代码如下:

class Solution {
public:
    int getMoneyAmount(int n) {
        vector<vector<int>> dp(n+1, vector<int>(n+1, 0));
        return minMoneyToWin(dp, 1, n);
    }
    
    int minMoneyToWin(vector<vector<int>> &dp, int start, int end)
    {
        if (start >= end)
            return 0;
        if (dp[start][end] != 0)
            return dp[start][end];
        int res = INT_MAX;
        for (int i=start; i<=end; i++) {
            int tmp = i + max(minMoneyToWin(dp, start, i-1), minMoneyToWin(dp, i+1, end));
            res = min(res, tmp);
        }
        dp[start][end] = res;
        return res;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容