Acwing.1388 游戏(区间DP对抗思想)

题目

玩家一和玩家二共同玩一个小游戏。

给定一个包含 N个正整数的序列。

由玩家一开始,双方交替行动。

每次行动可以在数列的两端之中任选一个数字将其取走,并给自己增加相应数字的分数。(双初始分都是 0分)

当所有数字都被取完时,游戏结束。

分更高的一方获胜。

请计算,如果双方都采取最优策略进行游戏,则游戏结束时,双方的得分各是多少。

输入格式

第一行包含整数 N。

后面若干行包含 N个整数,表示这个序列。注意每行不一定恰好包含一个数。

输出格式

共一行,两个整数,分别表示玩家一和玩家二的最终得分。

数据范围

2≤N≤100

数列中的数字的取值范围为 [1,200]

  • 输入样例:
6
4 7 2 9
5 2
  • 输出样例:
18 11

题解

import java.util.Scanner;/*** @author akuya* @create 2024-04-03-18:47*/
public class Main {static int N=105;static int n;static int w[]=new int[N];static int f[][]=new int[N][N];public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n=scanner.nextInt();for(int i=0;i<n;i++){w[i]=scanner.nextInt();}for(int len=1;len<=n;len++){for(int i=0;i+len-1<n;i++){int j=i+len-1;if(len==1)//区间长度为1则只有一个可拿。f[i][j]=w[i];elsef[i][j]=Math.max(w[i]-f[i+1][j],w[j]-f[i][j-1]);}}int sum=0,d=f[0][n-1];for(int i=0;i<n;i++) sum+=w[i];//A+B=SUM A-B=d//A=SUM-D/2//B=SUM-D/2System.out.println((sum+d)/2+" "+(sum-d)/2);}
}

思路

首先这道题用的是区间DP,区间DP与背包问题一样有具体的模板,第一层遍历区间长度,第二层遍历左端点。dp数组的两个元素也利索当然得是区间的两个端点。
这道题是一道经典的对抗问题,要求比较谁更高,也就是使自己的分数与对方的分数的分差更大,因此dp数组为选择i到j区间里分差最大的选择。在每第i-j区域的选择里,我们可以从左或者从右选,在这次选择之前是对方选择,对方肯定会选择对自己更优的方案,也就是使自己方差和我们方差最大的方案,设为a(a=f[i+1][j]orf[i][j-1])。那么在这次选择之前,我们与对方的方差是-a。我们需要在这样的前提情况下选择与对方方差最大的方案,也就是-a+左或者-a加上右。
完成以上逻辑即可解答出本题。

在这里插入图片描述

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

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

相关文章

VPN——GRE

1、VPN概念 Virtual Private Network ①虚拟专用网络 ②在公有的网络上架设私有的通道&#xff0c;构建一个专用的、安全性、服务质量得到保障的网络 ③实质&#xff1a;数据包的再封装与解封装的过程 2、分类 按照业务用途&#xff1a;【1】access&#xff1a;外出员工…

rust 自定义安装 error: linker `link.exe` not found

解决方案 On VS 2022, I tested both solutions. 4.39 GB “MSVC v143 - VS 2022 C x64/x86 build tools” and “Windows 10 SDK” 2.86 GB “Desktop development with C” Its better to just select “Desktop Development with C”. Heres the download for VS 202…

FIT-RAG:RAG架构是否正在趋向于标准化方法?

原文地址&#xff1a;fit-rag-are-rag-architectures-settling-on-a-standardised-approach 2024 年 4 月 2 日 随着RAG的使用&#xff0c;漏洞开始显现&#xff0c;这些问题的解决方案也开始变得越来越相似。 介绍 随着技术的不断发展&#xff0c;我们注意到一个有趣的现象&am…

rasa trian 报错解决---Project validation completed with errors.

rasa train 过程中&#xff1a;出现一下问题&#xff1b; Project validation completed with errors. 解决措施:python 3.10版本&#xff0c;rasa 3.6.19, 降低版本 pip3 install rasa3.5.17 -i https://pypi.tuna.tsinghua.edu.cn/simple成功解决

CS架构---Socket基础

目录 一、Socket简介1.1 通信模型1.2 类型1.3 创建和使用&#xff1a;1.4 地址族 二、客户/服务器模式2.1 服务器端&#xff08;Server Side&#xff09;2.2 客户端&#xff08;Client Side&#xff09;2.3 通信方式2.4 角色分工2.5 优点 三、Socket实战四、常见应用场景 一、S…

7个影响AEC的AI工具

人工智能&#xff08;AI&#xff09;工具在各个行业中越来越受欢迎&#xff0c;ChatGDP的推出无疑让人们看到了人工智能所能提供的可能性。 然而&#xff0c;人工智能不仅仅是生成文本或图形——它可以用于各种设置。 建筑行业也不例外&#xff0c;我们才刚刚开始发现人工智能…

探索----------------阿里云

目录 一、阿里云四大件 1、云服务器ECS 2、云数据库RDS 3、负载均衡SLB 4、对象存储OSS 5、其他的云计算产品 1&#xff09;内容分发网络CDN 2&#xff09;专有网络 VPC 二、linux发行版本 三、你平时对系统会怎么优化&#xff08;五大负载&#xff09; 1、cpu 使用率…

kettle使用MD5加密增量获取接口数据

kettle使用MD5加密增量获取接口数据 场景介绍&#xff1a; 使用JavaScript组件进行MD5加密得到Http header&#xff0c;调用API接口增量获取接口数据&#xff0c;使用json input组件解析数据入库 案例适用范围&#xff1a; MD5加密可参考、增量过程可参考、调用API接口获取…

五、postman基础使用案例

postman基础使用 相关案例【传递查询参数】【提交表单数据】【提交JSON数据】 注&#xff1a;postman⼀款⽀持调试和测试的⼯具&#xff0c;开发、测试⼯程师都可以使⽤。方法一般统一为&#xff1a;方法→请求头→请求体→断言 相关案例 【传递查询参数】 访问TPshop搜索商品的…

腾讯电商的时代就要来了,各位商家做好准备了吗?

大家好&#xff0c;我是电商糖果 今年大家在网上应该见到有人经常提起视频号小店&#xff0c;或者蝴蝶号小店这个名字。 视频号是腾讯旗下的一个部门&#xff0c;而它诞生的目的说起来也很搞笑。 就是为了和抖音&#xff0c;快手对抗&#xff0c;在2023年以前&#xff0c;抖…

01---webpack的基础篇

01 为什么需要webpack构建工具&#xff1f; 需要转化ES6及以上的语法&#xff0c;因为低版本浏览器不支持ES6及以上的语法需要转化jsx的语法等需要补齐css的前缀&#xff0c;因为不同浏览器对于css样式的兼容不同需要加前缀&#xff0c;以及预处理器。压缩混淆&#xff0c;压缩…

【项目实战经验】DataKit迁移MySQL到openGauss(上)

前言 本文将分享DataKit迁移MySQL到openGauss的项目实战&#xff0c;供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…

力扣热门算法题 174. 地下城游戏,189. 轮转数组,198. 打家劫舍

174. 地下城游戏&#xff0c;189. 轮转数组&#xff0c;198. 打家劫舍&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.31 可通过leetcode所有测试用例。 目录 174. 地下城游戏 解题思路 完整代码 Python Java 189. 轮转数…

面试题继承和实现的优先级

面试题继承和实现的优先级 问&#xff1a;下面代码中将会执行哪个run()方法 // 面试题 new Thread(new Runnable() {Overridepublic void run() {System.out.println("实现.....");}}){Overridepublic void run() {System.out.println("继承.....");}}.s…

蓝桥杯刷题--python-36

4199. 公约数 - AcWing题库 def gcd(a,b): while b: a,bb,a%b return a def init_divisors(a,b): dgcd(a,b) i1 while i*i<d: if d%i0: ans.append(i) if i!d//i:ans.append(d//i) i1 ans.so…

The Sandbox 与 Otherworld 合作推出元宇宙网络漫画中心

​ The Sandbox 将与韩国初创公司 Otherworld 合作&#xff0c;建立一个元宇宙网络动漫中心&#xff0c;为用户提供基于 KakaoPage 热门 IP 的各种体验。 Solo Leveling 是此次合作的第一个 IP。这部网络动画将深入主人公Sung Jinwoo的生活&#xff0c;并与 NFT 进行整合。随后…

【华为OD机试】出租车计费 、靠谱的车【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述: 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。 出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过…

JavaScript(五)---【DOM】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 JavaScript(二)---【js数组、js对象、this指针】-CSDN博客 JavaScript(三)---【this指针&#xff0c;函数定义、Call、Apply、函数绑定、闭包】-CSDN博客 JavaScript(四)---【执…

[蓝桥杯练习]通电

kruskal做法(加边) #include <bits/stdc.h> using namespace std; int x[10005],y[10005],z[10005];//存储i点的x与y坐标 int bcj[10005];//并查集 struct Edge{//边 int v1,v2; double w; }edge[2000005]; int cmp(Edge a, Edge b){return a.w < b.w;} int find(i…

奇异值分解及MATLAB实现

svd分解基本改变 奇异值分解(Singular Value Decomposition,简称SVD)是线性代数中的一种重要技术,广泛应用于信号处理、统计学、语义分析、图像处理等多个领域。SVD不仅仅是一种数学工具,它提供了一种深入理解数据结构和解决问题的方法。接下来,我们将深入探讨SVD的概念…