博弈论,LeetCode 1686. 石子游戏 VI

一、题目

1、题目描述

Alice 和 Bob 轮流玩一个游戏,Alice 先手。

一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。

给你两个长度为 n 的整数数组 aliceValues 和 bobValues 。aliceValues[i] 和 bobValues[i] 分别表示 Alice 和 Bob 认为第 i 个石子的价值。

所有石子都被取完后,得分较高的人为胜者。如果两个玩家得分相同,那么为平局。两位玩家都会采用 最优策略 进行游戏。

请你推断游戏的结果,用如下的方式表示:

  • 如果 Alice 赢,返回 1 。
  • 如果 Bob 赢,返回 -1 。
  • 如果游戏平局,返回 0 。

2、接口描述

class Solution {
public:int stoneGameVI(vector<int>& aliceValues, vector<int>& bobValues) {}
};

3、原题链接

1686. 石子游戏 VI


二、解题报告

1、思路分析

这个题目其实还是蛮好考虑的,竞争者只有两个,赢家只有一个,设alice最终得分为s1,bob为s2

Alice要想赢得话,最终s1 > s2,正难则反

我们考虑Alice拿了第i1,i2,i3……件物品,那么Bob只能拿Alice拿剩下的

这个过程可以等效为,Bob初始就拿着所有的物品,Alice从Bob手中拿走了一部分物品

假如Alice先拿第i件,那么s1 += a[i] , s2 -= b[i],ds1 - ds2 = a[i] + b[i]

我们要让最终的s1 - s2尽可能大,那么每次ds1 - ds2就要尽可能大,a[i] + b[i]就要尽可能大

所以二者每次贪心的取a[i] + b[i]最大的即可

2、复杂度

时间复杂度: O(nlogn) 空间复杂度:O(n)

3、代码详解

class Solution {
public:int stoneGameVI(vector<int>& a, vector<int>& b) {int n = a.size(), diff = 0;vector<int> id(n);iota(id.begin(), id.end(), 0);sort(id.begin(), id.end(), [&](int x, int y){ return a[x] + b[x] > a[y] + b[y]; });for(int i = 0; i < n; i++)diff += (i & 1) ? -b[id[i]] : a[id[i]];return (diff > 0) - (diff < 0);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF-show WEB入门--web21

上一阶段的信息泄露已经全部完结了&#xff0c;下一阶段的爆破也由此开始啦~~~ 下面让我们看看web21,这题是个经典的爆破问题 老样子我们先打开题目&#xff0c;查看题目提示&#xff1a; 我们可以看到题目提示为&#xff1a; 爆破什么的&#xff0c;都是基操 还有这题题目…

docker 入门教程之概述

入门指南概述 本指南包含有关如何开始使用 Docker 的分步说明。本指南向您展示如何&#xff1a; 将映像构建并作为容器运行。使用 Docker Hub 共享图像。使用带有数据库的多个容器来部署 Docker 应用程序。使用 Docker Compose 运行应用程序。 什么是容器&#xff1f; 容器…

【RPA】2分钟带你搞懂,这么火的RPA到底是什么?

2分钟带你搞懂&#xff0c;这么火的RPA到底是什么&#xff1f; 在当今数字化时代&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;成为了企业数字化转型的重要组成部分。RPA是一种基于规则的软件技术&#xff0c;可以自动执行重复性、高度规范化的业务流程任务。 与传…

jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

Android应用程序的编译和打包

Android系统的APK应用程序可以有以下几种编译方式 借助系统编译&#xff1a;利用Android.mk 文件将众多小项目组织起来 借助IDE编译&#xff1a;AndroidStudio 命令行编译 &#xff1a; 比如利用gradle脚本编译APK应用。 一、 通过命令行编译和打包APK 编译命令(Window系…

bat脚本 ftp上传文件夹并递归上传子文件夹中的文件

要使用批处理脚本递归地上传整个文件夹及其子文件夹中的文件到FTP服务器&#xff0c;您可以编写一个循环结构来遍历文件夹中的所有文件&#xff0c;并使用FTP命令逐个上传它们。以下是一个示例脚本&#xff1a; echo off set FTP_SERVERftp.example.com set FTP_USERyour_usern…

没有联合和枚举 , C语言怎么能在江湖混 ?

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能…

第二百九十六回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍如何如何处理ListView中的事件冲突.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了…

探索C语言结构体:编程中的利器与艺术

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言学习 贝蒂的主页&#xff1a;Betty‘s blog 1. 常量与变量 1. 什么是结构体 在C语言中本身就自带了一些数据类型&#x…

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略

LLMs之miqu-1-70b&#xff1a;miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略 目录 miqu-1-70b的简介 miqu-1-70b的安装和使用方法 1、安装 2、使用方法 miqu-1-70b的案例应用 miqu-1-70b的简介 2024年1月28日&#xff0c;发布了miqu 70b&#xff0c;潜在系列中的…

Linux系统调试课:ftrace跟踪器介绍

文章目录 一、什么是frace跟踪器?二、Ftrace 配置三、Ftrace 文件系统四、Ftrace 初体验五、函数跟踪六、Ftrace function_graph七、函数 Profiler沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是frace跟踪器? 操作系统内核对应用开发工程师来说就像一个黑盒,…

Go语言从基础到高级-目录

一、编程入门和Go语言简介 什么是编程和为什么要学习编程计算机编程的基本概念Go语言简介为什么选择Go语言 二、设置Go语言开发环境 如何安装Go语言设置环境变量Go语言的工作空间配置 三、Go语言基础 Hello, World!初体验变量和常量数据类型&#xff08;整数、浮点数、字符…

elementUI 表格中如何合并动态数据的单元格

elementUI 表格中如何合并动态数据的单元格 ui中提供的案例是固定写法无法满足 实际开发需求 下面进行改造如下 准备数据如下 //在表格中 设置单元格的方法 :span-method"spanMethodFun" <el-table :data"tableData" border :span-method"spa…

手撕spring bean的加载过程

这里我们采用手撕源码的方式&#xff0c;开始探索spring boot源码中最有意思的部分-bean的生命周期&#xff0c;也可以通过其中的原理理解很多面试以及工作中偶发遇到的问题。 springboot基于约定大于配置的思想对spring进行优化&#xff0c;使得这个框架变得更加轻量化&#…

Backtrader 文档学习- Observers

Backtrader 文档学习- Observers 1.概述 在backtrader中运行的策略主要处理数据源和指标。 数据源被加载到Cerebro实例中&#xff0c;并最终成为策略的一部分&#xff08;解析和提供实例的属性&#xff09;&#xff0c;而指标则由策略本身声明和管理。 到目前为止&#xff0c…

LabVIEW多功能接口卡驱动

LabVIEW多功能接口卡驱动 随着自动化测试系统的复杂性增加&#xff0c;对数据采集与处理的需求不断提高。研究基于LabVIEW开发平台&#xff0c;实现对一种通用多功能接口卡的驱动&#xff0c;以支持多通道数据采集及处理功能&#xff0c;展现LabVIEW在自动化和测量领域的强大能…

FlinkCDC全量及增量采集SqlServer数据

​ 本文将详细介绍Flink-CDC如何全量及增量采集Sqlserver数据源&#xff0c;准备适配Sqlserver数据源的小伙伴们可以参考本文&#xff0c;希望本文能给你带来一定的帮助。 一、Sqlserver的安装及开启事务日志 如果没有Sqlserver环境&#xff0c;但你又想学习这块的内容&#x…

如何部署Docker Registry并实现无公网ip远程连接本地镜像仓库

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

IPv4的公网地址不够?NAT机制可能是当下最好的解决方案

目录 1.前言 2.介绍 3.NAT机制详解 1.前言 我们都知道IPv4的地址范围是32个字节,这其中还有很多地址是不可用的.比如127.*,这些都是环回地址.那么在网路发展日新月异的今天,互联网设备越来越多,我们该如何解决IP地址不够用的问题呢?目前有一种主流的解决方案,也是大家都在用…

Visual Studio 2022 查看类关系图

这里写自定义目录标题 右键要查看的项目 -“查看”-“查看类图”效果展示&#xff1a; 原文地址 www.cnblogs.com 步骤1&#xff1a;勾选扩展开发 步骤2: 勾选类设计器 右键要查看的项目 -“查看”-“查看类图” 效果展示&#xff1a;