486. 预测赢家

这题拿到首先想到的是贪心算法,也联想到华工ACM那道管子题,想每次都拿最大的,但是好像不行,有些情况明显不适用,比如{1,5,233,7}这个测试用例, 对于这种情况,若贪心算,则会先拿7,但是拿7的话,233就会被后手拿了。所以并不可行。
emmm。然后想到了递归

每个玩家都要自己成绩最好 所以不能当方面考虑一方
https://www.bilibili.com/video/av31317000?from=search&seid=5864670697835878797

//选取评价函数为先手得分-后手得分,博弈树有重叠的部分可以重复利用。
class Solution {
    public boolean PredictTheWinner(int[] nums) {
        return getSorce(0, nums.length-1, nums) >= 0;
    }
    public int getSorce(int x, int y, int nums[]) {
        if (x == y)
            return nums[x];
        else {
            return Math.max(nums[x] - getSorce(x + 1, y, nums), nums[y] - getSorce(x, y - 1, nums)); 
        }
    }
}

递归有相同子问题一般可以转化为动态规划

猜你喜欢

转载自www.cnblogs.com/cznczai/p/11284216.html
今日推荐