蓝桥集训之游戏

蓝桥集训之游戏

  • 核心思想:博弈论 + 区间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;
  }
相关推荐
乌萨奇也要立志学C++4 分钟前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
vyuvyucd22 分钟前
C++引用:高效编程的别名利器
算法
鱼跃鹰飞1 小时前
Leetcode1891:割绳子
数据结构·算法
️停云️1 小时前
【滑动窗口与双指针】不定长滑动窗口
c++·算法·leetcode·剪枝·哈希
码农小韩2 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wen__xvn2 小时前
第 34 场 蓝桥·算法入门赛·百校联赛
算法
ASD125478acx2 小时前
超声心动图心脏自动检测YOLO11-NetBifPN算法实现与优化
算法
无限进步_3 小时前
【C语言&数据结构】对称二叉树:镜像世界的递归探索
c语言·开发语言·数据结构·c++·git·算法·visual studio
星辞树3 小时前
揭秘阿里 DIN:当深度学习遇上“千物千面”
算法
刘立军3 小时前
如何选择FAISS的索引类型
人工智能·算法·架构