[AtCoder Grand Contest 048] D - Pocky Game(区间dp + 博弈)

problem

AtCoder

solution

注意:本题不是平等博弈,因为先手只能取最左边,后手只能取最右边。

f[l][r][k]:f[l][r][k]:f[l][r][k]: 只剩下区间 [l,r][l,r][l,r] 等待操作,第 lll 堆石子数量为 kkk 的时候,先手是否必胜。

同理,g[l][r][k]:g[l][r][k]:g[l][r][k]: 只剩下区间 [l,r][l,r][l,r] 等待操作,第 rrr 堆石子数量为 kkk 的时候,后手是否必胜。

显然,如果 f/g[l][r][k]f/g[l][r][k]f/g[l][r][k] 可以必胜,那么 f/g[l][r][k+1]f/g[l][r][k+1]f/g[l][r][k+1] 也能必胜,无非是有次操作多取一颗石子。

所以不妨设 f[l][r]:f[l][r]:f[l][r]: 只剩下区间 [l,r][l,r][l,r] 操作,先手必胜时第 lll 堆石子数量至少为多少。

同理可得,g[l][r]:g[l][r]:g[l][r]: 只剩下区间 [l,r][l,r][l,r] 操作,后手必胜时第 rrr 堆石子数量至少为多少。

接下来考虑转移,转移都只与 f[l][r−1],g[l+1][r]f[l][r-1],g[l+1][r]f[l][r1],g[l+1][r] 有关。

  • f[l][r]f[l][r]f[l][r]

    • g[l+1][r]>a[r]g[l+1][r]>a[r]g[l+1][r]>a[r]

      那么先手可以直接取完 lll 堆,使得后手面临 [l+1,r][l+1,r][l+1,r] 的必败局面。

      因此只需要保证 lll 堆有石子就行了。

      f[l][r]=1f[l][r]=1f[l][r]=1

    • g[l+1][r]≤a[r]g[l+1][r]\le a[r]g[l+1][r]a[r]

      那么先手肯定不能一次取完使后手处于必胜局面。只能一个一个地取。

      我们知道至少取 f[l][r]−f[l][r−1]+1f[l][r]-f[l][r-1]+1f[l][r]f[l][r1]+1 个石子后,先手就会因接下来后手的操作陷入必败状态。

      因为此时 lll 堆石子个数 <f[l][r−1]<f[l][r-1]<f[l][r1],后手直接取完 rrr 堆,留给先手的就是 [l,r−1][l,r-1][l,r1] 的必败状态了。

      而后手则至少取 a[r]−g[l+1][r]+1a[r]-g[l+1][r]+1a[r]g[l+1][r]+1 个就会陷入必败状态。原因同上。也就是说后手也不敢一次取完,只能一个一个地取。

      此时想要先手获胜,必须先手更晚进入必败状态。

      f[l][r]−f[l][r−1]+1>a[r]−g[l+1][r]+1f[l][r]-f[l][r-1]+1>a[r]-g[l+1][r]+1f[l][r]f[l][r1]+1>a[r]g[l+1][r]+1

      ⇒f[l][r]>a[r]−g[l+1][r]+f[l][r−1]\Rightarrow f[l][r]>a[r]-g[l+1][r]+f[l][r-1]f[l][r]>a[r]g[l+1][r]+f[l][r1]

      f[l][r]=a[r]−g[l+1][r]+f[l][r−1]+1f[l][r]=a[r]-g[l+1][r]+f[l][r-1]+1f[l][r]=a[r]g[l+1][r]+f[l][r1]+1

  • g[l][r]g[l][r]g[l][r]

    • f[l][r−1]>a[l]f[l][r-1]>a[l]f[l][r1]>a[l]

      那么后手可以直接取完 rrr 堆,使得先手面临 [l,r−1][l,r-1][l,r1] 的必败局面。

      因此只需要保证 rrr 堆有石子就行了。

      g[l][r]=1g[l][r]=1g[l][r]=1

    • f[l][r−1]≤a[l]f[l][r-1]\le a[l]f[l][r1]a[l]

      那么后手肯定不能一次取完使先手处于必胜局面。只能一个一个地取。

      后手至少取 g[l][r]−g[l+1][r]+1g[l][r]-g[l+1][r]+1g[l][r]g[l+1][r]+1 个就会陷入必败状态。

      先手至少取 a[l]−f[l][r−1]+1a[l]-f[l][r-1]+1a[l]f[l][r1]+1 个就会陷入必败状态。

      此时必须后手更晚进入必败状态。

      g[l][r]−g[l+1][r]+1>a[l]−f[l][r−1]+1g[l][r]-g[l+1][r]+1>a[l]-f[l][r-1]+1g[l][r]g[l+1][r]+1>a[l]f[l][r1]+1

      ⇒g[l][r]>a[l]+g[l+1][r]−f[l][r−1]\Rightarrow g[l][r]>a[l]+g[l+1][r]-f[l][r-1]g[l][r]>a[l]+g[l+1][r]f[l][r1]

      g[l][r]=a[l]+g[l+1][r]−f[l][r−1]+1g[l][r]=a[l]+g[l+1][r]-f[l][r-1]+1g[l][r]=a[l]+g[l+1][r]f[l][r1]+1

区间 dpdpdp 转移即可,时间复杂度 O(n2)O(n^2)O(n2)

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 105
#define int long long
int T, n;
int a[maxn];
int f[maxn][maxn], g[maxn][maxn];signed main() {scanf( "%lld", &T );while( T -- ) {memset( f, 0, sizeof( f ) );memset( g, 0, sizeof( g ) );scanf( "%lld", &n );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &a[i] );for( int len = 2;len <= n;len ++ )for( int l = 1;l <= n;l ++ ) {int r = l + len - 1;if( r > n ) break;if( g[l + 1][r] > a[r] ) f[l][r] = 1;else f[l][r] = a[r] + f[l][r - 1] - g[l + 1][r] + 1;if( f[l][r - 1] > a[l] ) g[l][r] = 1;else g[l][r] = a[l] + g[l + 1][r] - f[l][r - 1] + 1;}if( f[1][n] <= a[1] ) printf( "First\n" );else printf( "Second\n" );}return 0;
}

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

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

相关文章

P4147 玉蟾宫

P4147 玉蟾宫 题意&#xff1a; 给你一个n * m的矩阵&#xff0c;矩阵每个值有F或R&#xff0c;求最大的全为F的矩阵&#xff0c;输出面积 * 3 题解&#xff1a; 很明显&#xff0c;求最大01矩阵&#xff0c;悬线法或者单调栈 对于模板除了要记熟还要知道原理&#xff0c;不…

[NewLife.XCode]数据初始化

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netstandard&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0…

I love counting HDU - 6964

I love counting HDU - 6964 题意&#xff1a; 一个数组c&#xff0c;给你了(l,r)一个范围&#xff0c;问这个范围内满足ci ^ a < b数量的有多少&#xff1f; 题解&#xff1a; 我第一反应是莫队&#xff0c;直接莫队得到结果&#xff0c;但是发现样例不对&#xff0c;再…

CF98E Help Shrek and Donkey(纳什博弈 + 大讨论)

problem 洛谷链接 solution 纳什均衡 是博弈论中一种解的概念&#xff0c;它是指满足下面性质的策略组合&#xff1a;任何一位玩家在此策略组合下单方面改变自己的策略&#xff0c;其他玩家策略不变&#xff0c;都不会提高自身的收益。 一个策略组合被称为纳什均衡当且仅当…

[NewLife.XCode]反向工程(自动建表建库大杀器)

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netstandard&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0…

树上启发式合并

文章内容选自OI Wiki 参考博客 内容&#xff1a; 树上启发式合并&#xff08;dsu on tree&#xff09;对于某些树上离线问题可以速度大于等于大部分算法且更易于理解和实现的算法。 他是用来解决一类树上询问问题&#xff0c;一般这种问题有两个特征&#xff1a; 只有对子树…

CF1270H Number of Components(线段树)

problem 洛谷链接 solution 定理 若 i<ji<ji<j 且 i,ji,ji,j 联通&#xff0c;则必有 k∈(i,j)k\in(i,j)k∈(i,j) 也与 i,ji,ji,j 联通。 下面给出证明&#xff0c;挺显然的。 若 ai<aja_i<a_jai​<aj​&#xff0c;则一定有 ai<ak∨ak<aja_i<…

tex模板

\documentclass{beamer} \usetheme{Madrid} \usecolortheme{default} \usepackage{ctex} \usefonttheme[math]{serif}\usepackage{graphicx} \graphicspath{{img/},{pics/}} % 图片在img目录\title{} \author{} \institute{} \date{\today} \begin{document}\maketitle\begin{f…

Wexflow:C#中的开源工作流引擎

Wexflow是一个高性能、可扩展、模块化和跨平台的工作流引擎。Wexflow在GitHub&#xff1a;https://github.com/aelassas/Wexflow。Wexflow的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下&#xff0c;构建自动化和工作流过程变得简单。Wexflow还有助于使长…

分析数学笔记

文章目录夹逼收敛定理(P45):单调收敛定理(P50):闭区间套定理(P56)&#xff1a;有限覆盖定理(P59)&#xff1a;可数集(P62)&#xff1a;聚点(P62)&#xff1a;聚点原理(P62)&#xff1a;波尔查诺-魏尔斯特拉斯定理(P64)柯西序列&柯西收敛准则(P65)压缩映照原理(P67)上下极限…

ASP.NET Core 沉思录 - Logging 的两种介入方法

ASP.NET Core 中依赖注入是一个很重要的环节。因为几乎所有的对象都是由它创建的&#xff08;相关文章请参见《ASP.NET Core 沉思录 - ServiceProvider 的二度出生》&#xff09;。因此整个日志记录的相关类型也被直接添加到了 IServiceCollection 中。今天我们将介绍各个接口/…

CF936D World of Tank(思维dp)

problem 洛谷链接 solution 有一种 dpdpdp 并不常见。其主要思想大概就是积累后再支出 / 先预支后再填充。 本题就是积累后再支出。显然炮冷却好了后就一直处于可用状态&#xff0c;玩没玩过游戏的都知道一冷却好就打一定不会劣于等一会再打&#xff0c;因为这道题的炮也没…

C# 中的Async 和 Await 的用法详解

众所周知C#提供Async和Await关键字来实现异步编程。在本文中&#xff0c;我们将共同探讨并介绍什么是Async 和 Await&#xff0c;以及如何在C#中使用Async 和 Await。同样本文的内容也大多是翻译的&#xff0c;只不过加上了自己的理解进行了相关知识点的补充&#xff0c;如果你…

AtCoder4515 [AGC030F] Permutation and Minimum(dp)

problem 洛谷链接 solution 一个 AiA_iAi​ 只会影响一个 BiB_iBi​&#xff0c;BiB_iBi​ 之间的决定因素 AAA 是不会有交的。 所以如果相邻两个对同一个 BiB_iBi​ 影响的 A2i,A2i−1A_{2i},A_{2i-1}A2i​,A2i−1​ 都是确定的&#xff0c;那么 BiB_iBi​ 也就确定了。 …

Tree Xor(未完全搞定)

Tree Xor 题意&#xff1a; 一颗有n个点的树&#xff0c;边权给出&#xff0c;第i个节点的权值为Wi&#xff0c;但并不知道Wi&#xff0c;只知道Wi在[Li,Ri]&#xff0c;边权等于两端点的异或值 问W序列有多少可能 题解&#xff1a; 如果我们知道一个点的值&#xff0c;就可…

Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务

本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构&#xff0c;部署的微服务主要包括统一网关&#xff08;使用Ocelot开发&#xff09;、统一认证&#xff08;IdentityServer4&#xff09;、应用服务&#xff08;asp.net core web api&#xff09;&#xff1b;本文不…

AtCoder3950 [AGC022E] Median Replace(DFA + dp)

problem solution 可以从 DFA\text{DFA}DFA 的思想来考虑这道题。 考虑建一个 DFA\text{DFA}DFA 只接受最后可以变成字符串 111 的原串。 因为每次是选择三个 连续/相邻 的位置操作&#xff0c;限制是比较强的&#xff0c;无非有三种情况。 case1 三个全 111&#xff0c;操…

Minimum grid

Minimum grid 题意&#xff1a; 一个n * n的矩阵&#xff0c;有m个位置需要填数&#xff0c;填的数的范围是0<k<1e6,需要满足第i行的最大值是b&#xff0c;第j列的最大值是ci&#xff0c;求一个满足条件的最小代价 n<2e3,m<8e5,k<1e6 题解&#xff1a; 如果…

ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

一、前言在之前的文章&#xff08;ASP.NET Core 实战&#xff1a;Linux 小白的 .NET Core 部署之路&#xff09;中&#xff0c;我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core Runtime、Nginx、MySQL&#xff0c;以及如何将我们的 ASP.NET Core MVC 程序部署到 Li…

AtCoder 4169 [ARC100D] Colorful Sequences(dp)

problem 洛谷链接 solution 逆向考虑。ansansans 所有蛋糕中的 aaa 序列出现次数 −-− 在 non−colorfulnon-colorfulnon−colorful 蛋糕中的出现次数。 在所有蛋糕中的出现次数&#xff0c;即 (n−m1)⋅kn−m(n-m1)k^{n-m}(n−m1)⋅kn−m&#xff0c;枚举 aaa 序列开头的…