蓝桥集训之游戏

蓝桥集训之游戏

  • 核心思想:博弈论 + 区间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;
  }
相关推荐
会编程的土豆5 分钟前
【复习】二分查找
数据结构·c++·算法
Yzzz-F36 分钟前
Problem - D - Codeforces
算法
penngo38 分钟前
用 Claude Code 开发多人猜拳游戏:Go 语言实践
开发语言·游戏·golang
chas_8840 分钟前
macbook air M5 32G本地跑ddtree-mlx效果
算法
programhelp_42 分钟前
WeRide OA 2026 高频真题分享 & 详细备战指南
经验分享·算法·面试·职场和发展
Neolnfra42 分钟前
在 WorkBuddy 上开发游戏:我的实战经验分享
游戏·游戏机·workbuddy·开发游戏
菜菜的顾清寒1 小时前
Leetcode (18) 力扣100 矩阵置零
算法
董董灿是个攻城狮1 小时前
5分钟搞懂微调的能力退化问题
算法
weitingfu1 小时前
AI 游戏,为什么更适合鸿蒙?
人工智能·游戏·华为·ai·harmonyos
sensen_kiss1 小时前
CPT306 Principles of Computer Games Design 电脑游戏设计原理 Pt.6 Gameplay 游戏玩法
学习·游戏