https://leetcode-cn.com/problems/predict-the-winner/
给出一个非负数组,两个人轮流选择从数组的左端或右端拿数,第一个人拿到的总和不低于第二个人则获胜。
如果数组的长度是偶数,那么第一个人可以挑选奇数位置之和与偶数位置之和的较大者(注意平局也算胜利),永远立于不败之地,可先行处理。
考虑整个数组剩下从 i 到 i+j (含i+j)的一段时,先手的人比后手的人还能多取得的最大分数为t[i][j],那么t[0][n-1]就是第一人总优势。
如果 j==0 , 当然有:
t[i][0]=nums[i]
否则,选左边,就是nums[i] - t[i+1][j-1],选右边,就是nums[i+j] - t[i][j-1].
所以t[i][j]=max(nums[i] - t[i+1][j-1] , nums[i+j] - t[i][j-1]).
class Solution {
public:
bool PredictTheWinner(vector& nums) {
if(nums.size()%2==0){return 1;}
vector> temp;
temp.resize(nums.size());
for(int i=0;i=0;
}
};
页面更新:2024-05-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号