[ABC201D] Game in Momotetsu World 题解
题目大意
在一个 \(n\times m\) 的网格中,存在红色和蓝色两种格子,红色格子用 - 表示,蓝色格子用 + 表示。
现在 Takahashi 和 Aoki 要在这个网格中进行游戏,游戏的规则如下:
- 初始时,有一枚棋子摆放在左上角,即 \((1,1)\) 的位置。两名玩家的分数均为 \(0\)。
- 双方轮流行动,Takahashi 先行动。
- 在每次行动中,行动者可以选择将棋子向下或向右移动一格,但移动后不能超出网格。移动后如果棋子位于红色格子,那么行动者的分数 \(-1\),否则 \(+1\)。
- 当棋子无法行动时,即位于 \((n,m)\) 时,游戏结束,得分高者为胜者。
现在告诉你网格的颜色情况,请你判断谁将会获胜。你可以认为这两名玩家都绝顶聪明。
思路分析
在打 AT 时,一个重要的原则是遇事不决就 DP。
考虑 DP,设 \(f_{i,j}\) 表示棋子位于 \((i,j)\) 时,Takahashi 的得分与 Aoki 的得分的差。
那么 Takahashi 的目标是最大化这个值,而 Aoki 则想要最小化这个值。
因为棋子只能向右或向下走,所以此时的回合数就是 \(i+j-1\)(回合从 \(1\) 开始)。那么容易写出状态转移方程:
\]
(\(a_{i,j}\) 表示这一位的符号,即若 \((i,j)\) 为 +,那么 \(a_{i,j}\) 为 \(1\),否则为 \(-1\)。)
因为转移比较奇怪,所以考虑用记搜实现。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=2020;
#define inf 0x3f3f3f3f
int a[N][N],dp[N][N];
int n,m;
char ch[N];
int dfs(int x,int y){
if(x==n&&y==m) return 0;//到达边界
if(dp[x][y]) return dp[x][y];
if((x+y-1)%2==1){
dp[x][y]=-inf;//记得赋初值和特判边界!
if(x!=n) dp[x][y]=max(dp[x][y],dfs(x+1,y)+a[x+1][y]);
if(y!=m) dp[x][y]=max(dp[x][y],dfs(x,y+1)+a[x][y+1]);
return dp[x][y];
}
else{
dp[x][y]=inf;
if(x!=n) dp[x][y]=min(dp[x][y],dfs(x+1,y)-a[x+1][y]);
if(y!=m) dp[x][y]=min(dp[x][y],dfs(x,y+1)-a[x][y+1]);
return dp[x][y];
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",ch+1);
for(int j=1;j<=m;j++)
a[i][j]=(ch[j]=='+')?1:-1;
}
int ans=dfs(1,1);//1 1 即为答案
if(ans>0) cout<<"Takahashi\n";
if(ans==0) cout<<"Draw\n";
if(ans<0) cout<<"Aoki\n";
return 0;
}
[ABC201D] Game in Momotetsu World 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- Python Flask - 快速构建Web应用详解
本文将详细探讨Python Flask Web服务.我将首先简单介绍Flask,然后将逐步进入Flask中的路由.模板.表单处理以及数据库集成等高级概念,目标是能够让大家了解并掌握使用Flask来创建 ...
- Collection 接口及其常用方法
Collection 接口的特点 Collection接口没有直接实现类,提供了更具体的子接口(如Set和List)的实现.Collection实现类(通常通过其中一个子接口间接实现Collectio ...
- selenium元素定位---ElementNotInteractableException(元素不可交互异常)解决方法
方法一: 增加强制等待时间 方法二: 使用js点击 element = self.browser.find_element(By.XPATH, "//td[@class='el-table_ ...
- Unity 4.6 bate 20 or 4.5.5 +vuforia3.0.9 发布到真机错误 解决
错误图 +错误码 014-11-20 15:45:49.224 youzheng[6527:1035587] ################### enable 32014-11-20 15:45: ...
- MyBatis理论
MyBatis简介 MyBatis是什么? MyBatis是一款优秀的持久层框架,一个ORM(对象关系映射)框架,它支持定制化SQL.存储过程以及高级映射.MyBaits避免了几乎所有JDBC代码和手 ...
- Linux系统安装CH341驱动
Linux系统安装CH341驱动 Linux系统(这里以ubuntu20.04为例)本身会自动安装CH340驱动,随着时间的推移,旧版本的驱动已经无法支持当下的CH340模块,所以我们需要重新安装驱动 ...
- python教程 入门学习笔记 第2天 第一个python程序 代码规范 用默认的IDLE (Python GUI)编辑器编写
四.第一个python程序 1.用默认的IDLE (Python GUI)编辑器编写 2.在新建文件中写代码,在初始窗口中编译运行 3.写完后保存为以.py扩展名的文件 4.按F5键执行,在初始窗口观 ...
- 发布关于PostGIS对于USD格式的拓展
我们非常高兴的发布为了一年一度的SIGGRAPH 2023发布关于为PostGIS支持USD格式的新拓展. 新添加了3个函数 ST_AsUSDA(geom geometry, usd_root_nam ...
- jQuery项目的小技巧
1.返回顶部按钮 你可以利用 animate 和 scrollTop 来实现返回顶部的动画,而不需要使用其他插件. // Back to top // Back to top $('a.top').c ...
- AVR汇编(四):数据传送指令
AVR汇编(四):数据传送指令 AVR指令主要分为五类:算术和逻辑指令.分支指令.位操作指令.数据传送指令.MCU控制指令,今天我们先来认识其中最常用的数据传送指令. 汇编程序的编写.编译和调试 学习 ...