当前位置: 首页 > news >正文

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加上右。
完成以上逻辑即可解答出本题。

在这里插入图片描述

相关文章:

  • [环境配置]conda 64位安装32位python
  • 【大模型】大模型 CPU 推理之 llama.cpp
  • 阿里云通用算力型u1云服务器配置性能评测及价格参考
  • CAD Plant3D 2023 下载地址及安装教程
  • Linux运维-SHELL编程之正则表达式与流编辑处理器
  • 吴恩达:AI 智能体的四种模式
  • 深入PostgreSQL中的pg_global表空间
  • [xboard]real6410-5.2 移植kernel网络驱动
  • 【国信华源2024年首场春季校园招聘面试会举办】
  • 【Rust】基础语法
  • uni app 扫雷
  • python 自制黄金矿工游戏(设计思路+源码)
  • 美摄科技AI智能图像矫正解决方案
  • 设计模式:工厂模式和抽象工厂模式的区别
  • 是否有替代U盘,可安全交换的医院文件摆渡方案?
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • canvas 绘制双线技巧
  • CEF与代理
  • FastReport在线报表设计器工作原理
  • gulp 教程
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Rancher-k8s加速安装文档
  • springboot_database项目介绍
  • VuePress 静态网站生成
  • 复杂数据处理
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 前端代码风格自动化系列(二)之Commitlint
  • 使用API自动生成工具优化前端工作流
  • 【干货分享】dos命令大全
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​批处理文件中的errorlevel用法
  • #1014 : Trie树
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (差分)胡桃爱原石
  • (多级缓存)多级缓存
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (学习日记)2024.01.19
  • (转载)利用webkit抓取动态网页和链接
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • . NET自动找可写目录
  • .Net 4.0并行库实用性演练
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Core中Emit的使用
  • .Net IE10 _doPostBack 未定义
  • /bin、/sbin、/usr/bin、/usr/sbin
  • ::
  • @ComponentScan比较
  • [ C++ ] STL---string类的模拟实现
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [BZOJ 4598][Sdoi2016]模式字符串