[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 ...
随机推荐
- Containerd组件 —— containerd-shim-runc-v2作用
1.概述 通过<浅析开源容器标准--OCI>.<浅析容器运行时>和<浅析Kubernetes CRI>这三篇博文我们了解了容器标准OCI.容器运行时以及Kubern ...
- 《逆向工程核心原理》之DLL注入
DLL注入 DLL注入指的是向运行中的其他进程强制插入特定的DLL文件.从技术细节来说,DLL注入命令其他进程自行调用LoadLibrary() API,加载(Loading)用户指定的DLL文件.D ...
- jdbc-plus是一款基于JdbcTemplate增强工具包,基于JdbcTemplate已实现分页、多租户、动态表名等插件,可与mybatis、mybatis-plus等混合使用
jdbc-plus简介 jdbc-plus是一款基于JdbcTemplate增强工具包,基于JdbcTemplate已实现分页.多租户.动态表名等插件,可与mybatis.mybatis-plus等混 ...
- Python数据分析易错知识点归纳(四):Matplotlib
四.matplotlib 基本特性 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y1 = ...
- jquery解决跨域问题
在Ajax请求的url不是本地或者同一个服务器下面的URI,最后虽然请求显示为200,但是不会返回任何数据,事实上简单来说请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何 ...
- 分布式ID性能评测:CosId VS 美团 Leaf
分布式ID性能评测:CosId VS 美团 Leaf 基准测试环境 MacBook Pro (M1) JDK 17 JMH 1.36 运行在本机的Docker 的 mariadb:10.6.4 运行基 ...
- error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
解决办法: python3 是用 VC++ 14 编译的, python27 是 VC++ 9 编译的, 安装 python3 的包需要编译的也是要 VC++ 14 以上支持的.可以下载安装这个:vi ...
- asset module type 替代 loader 处理图片字体等文件资源
前面文章中 体验了webpack的打包 .解析css资源 ,接下来看看项目中常用到的图片.字体.文件该怎么处理吧~ 项目路径如下,在上一篇 解析css资源 项目基础上增加了一些文件 demo ├─ s ...
- CentOS7挂载NTFS格式的硬盘
前言 一些NTFS格式的移动硬盘或U盘插在服务器上可能不会自动挂载,本文为手动挂载的步骤. 步骤 安装相关程序: yum install -y ntfs-3g 使用一些命令查看需要挂载的分区 # 查看 ...
- 一文详解TextBrewer
本文分享自华为云社区<TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术.提供便捷快速的知识蒸馏框架.提升模型的推理速度,减少内存占用>,作者:汀丶. TextBrewer ...