蓝桥集训之游戏

蓝桥集训之游戏

  • 核心思想:博弈论 + 区间dp

    • 设玩家1的最优解为A 玩家2的最优解为B

      • 1的目标就是使A-B最大 2的目标就是使B-A最大
    • 玩家1取L左端点右边子区间结果就是玩家2的最优解B-A

      • 即当前结果为w[L] -- (B-A)
    • 玩家1取R右端点左边子区间结果就是玩家2的最优解B-A

      • 即当前结果为w[R] -- (B-A)
cpp 复制代码
  #include <iostream>
  #include <cstring>
  #include <algorithm>
  
  using namespace std;
  const int N = 110;
  int w[N];
  int f[N][N];
  int n;
  
  int main()
  {
      cin>>n;
      for(int i=0;i<n;i++) cin>>w[i];
      for(int len = 1;len<=n;len++)  //区间dp
      {
          for(int i=0;i+len-1<n;i++)
          {
              int j = i+len-1;  //i左端点 j右端点
              //右子区间结果为f[i+1][j] , 左子区间结果为f[i][j-1];
              f[i][j] = max(w[i] - f[i+1][j] , w[j] - f[i][j-1]);
          }
      }
      int sum = 0,d = f[0][n-1];  //A+B-sum , A-B=f[0][n-1] 联立求解AB
      for(int i=0;i<n;i++) sum+=w[i];
      cout<<(sum+d)/2<<" "<<(sum-d)/2<<endl;
      return 0;
  }
相关推荐
We་ct7 分钟前
LeetCode 30. 串联所有单词的子串:从暴力到高效,滑动窗口优化详解
前端·算法·leetcode·typescript
-Try hard-9 分钟前
数据结构|概念及单向有头链表
数据结构·算法·vim
历程里程碑10 分钟前
子串----和为K的子数组
大数据·python·算法·leetcode·elasticsearch·搜索引擎·哈希算法
Aaron158812 分钟前
通信灵敏度计算与雷达灵敏度计算对比分析
网络·人工智能·深度学习·算法·fpga开发·信息与通信·信号处理
2301_7903009615 分钟前
C++中的命令模式
开发语言·c++·算法
2301_8223769417 分钟前
C++中的解释器模式
开发语言·c++·算法
xhbaitxl21 分钟前
算法学习day31-贪心算法
学习·算法·贪心算法
爱学习的阿磊21 分钟前
C++代码冗余消除
开发语言·c++·算法
YuTaoShao22 分钟前
【LeetCode 每日一题】2976. 转换字符串的最小成本 I
算法·leetcode·职场和发展
全职计算机毕业设计31 分钟前
设计属于自己的古代纸币 古代纸币H5交互设计游戏
游戏