【算法题】博弈论:数组选数字
来源:互联网 发布:linux 重新安装lnmp 编辑:程序博客网 时间:2024/06/05 10:26
给定一个数组,两个人A、B依次从数组最左端选择一个或者两个数字,最后选择的数字之和较大者赢。假设两个人都足够聪明,A先选,给定数组,判断A、B谁能赢。
分析:
给定Array[0]…Array[n]。
dp[i]表示当前数组为Array[i]…Array[n]时,当前选择的人最多能从数组中选出多少值。
使用sum[i] = Array[i]+….+Array[n]。
则
#include <vector>#include <cstdio>#include <numeric>#include <iostream>#include <algorithm>using namespace std;bool PredictTheWinner(vector<int>& nums){ int n = nums.size(); vector<int> sum(n+1,0); for (auto i = n - 1; i >= 0;--i) sum[i] = sum[i + 1] + nums[i]; vector<int> dp(n); dp[n - 1] = sum[n - 1]; dp[n - 2] = sum[n - 2]; for (auto i = n - 3; i >= 0; --i) { dp[i] = max(dp[i], sum[i] - dp[i + 1]); dp[i] = max(dp[i], sum[i] - dp[i + 2]); } return sum[0] < 2*dp[0];}int main(){ vector<int> vec{1,2,3,4,5,6}; cout<<PredictTheWinner(vec)<<endl; return 0;}
阅读全文
0 0
- 【算法题】博弈论:数组选数字
- 【算法题】博弈论:leetcode 486 数组取数
- 算法-数组:螺旋数字排列
- 算法题:数组中出现次数超过一半的数字
- 算法题:数组中只出现一次的两个数字
- 算法题/数字在排序数组中出现的次数
- 算法题/数组中出现次数超过一半的数字
- 算法与数据结构-博弈论
- 博弈论 负极大值算法
- 博弈论 算法摘记
- 三个博弈论算法分析
- 算法1:博弈论
- 三个博弈论算法分析
- 博弈论 题
- 一个计算数字数组概览的算法
- 算法学习-数字连续的子数组
- [算法]找出旋转数组的最小数字
- 算法题目---旋转数组的最小数字
- android关于打开虚拟机时右侧工具栏不显示的问题
- NYOJ-一种排序
- S3C2440 gpio + main
- java bigdecimal 详解
- Hello
- 【算法题】博弈论:数组选数字
- 高级Java工程师要求
- 服务篇六(2)---redis最新命令总结
- ORACLE日期函数
- 文章命名规则
- 冒号
- 润乾报表V5 对接sap hana数据库
- Java基础-数组:猜字母数字
- 再idea下svn 提示文件is not under version control