class Solution {
public:
bool PredictTheWinner(vector<int>& nums) {
int N = nums.size();
int dpA[N+1][N+1];
int dpB[N+1][N+1];
memset(dpA,0,sizeof(dpA));
memset(dpB,0,sizeof(dpB));
for(int i=0;i<N;i++){
dpA[i][i] = nums[i];
for(int j=i-1;j>=0;j--){
dpA[j][i] = max(dpB[j+1][i] + nums[j],dpB[j][i-1] + nums[i]);
dpB[j][i] = min(dpA[j+1][i],dpA[j][i-1]);
}
}
return dpA[0][N-1] >= dpB[0][N-1];
}
};
No.73 - LeetCode486 - 两端取数字 - 博弈dp - 区间dp
最新推荐文章于 2021-07-12 21:11:45 发布
本文介绍了一个使用动态规划解决的博弈论问题。在一个由整数构成的数组中,两位玩家轮流从数组两端取走数值,目标是获得比对手更高的总和。通过构建动态规划矩阵,算法能够预测先手玩家是否能赢得比赛。代码实现展示了如何初始化和更新状态矩阵,最终判断胜者。
397

被折叠的 条评论
为什么被折叠?



