[dp+博弈]棋盘的必胜策略
链接:https://ac.nowcoder.com/acm/problem/21797
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
'E': 表示出口,可能有多个
'T': 只有一个,表示起点
'#': 表示障碍
'.': 表示空地
牛牛和牛妹在这样一个棋盘上玩游戏,他们有一张写有整数k的卡片,一开始放置在起点的位置,现在牛牛和牛妹开始轮流操作,牛牛先操作
当前操作的牛会选择上下左右其中一个方向移动卡片,每走一步,卡片上的数字减去1
只能走到空地上, 或者走到出口,走到出口,游戏就会结束,卡片的数字变成0的时候游戏也会结束,不能再移动的牛会输掉游戏
如果牛牛和牛妹都用最佳策略,请问谁会赢
输入描述:
第一行输入3个整数r,c,k
接下来r行每行读入k个字符表示棋盘 1 ≤ r,c ≤ 50, 1 ≤ k ≤ 100
输出描述:
如果牛牛有必胜策略,输出"niuniu"
否则输出"niumei"
备注:
子任务1:mac(r,c) <= 10
子任务2:max(r,c) <= 20
子任务3:无限制
题意:一个r行c列的二维棋盘,有障碍物‘#’和空地‘.’,有多个出口’E‘和一个起点’T‘,从起点开始可以走k步,若k变为0时则把牌的k变为0的这个牛取胜,若能在k步或k步内到达任意一个终点E,则把牌移动到终点的那个牛胜,现在牛牛先手,问牛牛能否必胜
思路:如果从起点出发能到达一个必胜状态,则先手必胜
现在从起点开始搜索周围的点
先看这个点如果上一个牛把牌移动到了当前这个点使得牌的k变为0或到达终点,则现在这只牛就输了,返回一个0
若这个点不发货上述条件,则再从这个点出发,看周围上下左右的点,若能走在棋盘内且还剩余步数,下一步能走到一个点使下一个牛输,则此点是可使这个牛赢的点,否则,若从这个点出发,下一步走不到一个点使下一个牛输的点,则此点是可使这个牛输的点
#include<bits/stdc++.h>
using namespace std;
const int amn=1e2+;
char mp[][];
int dp[][][amn],r,c,k,dic[][]={{,},{,-},{,},{-,}},dx,dy,si,sj;
int dfs(int x,int y,int k){
if(k<=||mp[x][y]=='E')return dp[x][y][k]=;///如果上一个牛把牌移动到了当前这个点使得牌的k变为0或到达终点,则现在这只牛就输了,返回一个0
if(dp[x][y][k]!=-)return dp[x][y][k]; ///如果这个点被走过了,返回这个状态
for(int i=;i<;i++){
dx=x+dic[i][];
dy=y+dic[i][];
if(dx>=&&dx<=r&&dy>=&&dy<=c&&mp[dx][dy]!='#'&&k>&&!dfs(dx,dy,k-)) ///若从这个点出发,能走在棋盘内且还剩余步数,下一步能走到一个点使下一个牛输,则此点是可使这个牛赢的点
return dp[x][y][k]=;
}
return dp[x][y][k]=; ///若从这个点出发,下一步走不到一个点使下一个牛输的点,则此点是可使这个牛输的点
}
int main(){
ios::sync_with_stdio();
cin>>r>>c>>k;
for(int i=;i<=r;i++){
for(int j=;j<=c;j++){
cin>>mp[i][j];
if(mp[i][j]=='T'){si=i,sj=j;}
}
}
memset(dp,-,sizeof dp);
if(dfs(si,sj,k)==)printf("niuniu\n"); ///如果从起点出发能到达一个必胜状态,则先手必胜
else printf("niumei\n");
}
/***
一个r行c列的二维棋盘,有障碍物‘#’和空地‘.’,有多个出口’E‘和一个起点’T‘,从起点开始可以走k步,若k变为0时则把牌的k变为0的这个牛取胜,若能在k步或k步内到达任意一个终点E,则把牌移动到终点的那个牛胜,现在牛牛先手,问牛牛能否必胜
如果从起点出发能到达一个必胜状态,则先手必胜
现在从起点开始搜索周围的点
先看这个点如果上一个牛把牌移动到了当前这个点使得牌的k变为0或到达终点,则现在这只牛就输了,返回一个0
若这个点不发货上述条件,则再从这个点出发,看周围上下左右的点,若能走在棋盘内且还剩余步数,下一步能走到一个点使下一个牛输,则此点是可使这个牛赢的点,否则,若从这个点出发,下一步走不到一个点使下一个牛输的点,则此点是可使这个牛输的点
***/
[dp+博弈]棋盘的必胜策略的更多相关文章
- Chomp游戏(必胜策略分析)
游戏简介 Chomp是一个双人游戏,有m x n块曲奇饼排成一个矩形格状,称作棋盘. ----两个玩家轮流自选一块还剩下的曲奇饼,而且还要把它右边和下边所有的曲奇饼都取走(如果存在) ----先吃到左 ...
- Chomp类游戏——必胜策略分析
首先介绍一个重要定理——策梅洛定理(Zermelo) 策梅洛定理,表明在二人参与的游戏/博弈中,如果满足: --------游戏的步骤数有限 --------信息完备(二人都了解游戏规则,了解游戏曾经 ...
- 记忆化dp博弈
题:http://poj.org/problem?id=2068 题意: 有两个队伍A,B,每个队伍有N个人,交叉坐.即是A(1,3,5,7.....)B(2,4,6,8....).告诉你每个mi(1 ...
- codevs 1421 秋静叶&秋穣子(树上DP+博弈)
1421 秋静叶&秋穣子 题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...
- hdu6199 gems gems gems dp+博弈
/** 2017 ACM/ICPC Asia Regional Shenyang Online 解题报告 题目:hdu6199 gems gems gems 链接:http://acm.hdu.edu ...
- POJ 2068 NIm (dp博弈,每个人都有特定的取最大值)
题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...
- UVA 10404 Bachet's Game(dp + 博弈?)
Problem B: Bachet's Game Bachet's game is probably known to all but probably not by this name. Initi ...
- UVA 10891 区间DP+博弈思想
很明显带有博弈的味道.让A-B最大,由于双方都采用最佳策略,在博弈中有一个要求时,让一方的值尽量大.而且由于是序列,所以很容易想到状态dp[i][j],表示序列从i到j.结合博弈中的思想,表示初始状态 ...
- hdu4778:状压dp+博弈
题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...
随机推荐
- 「NOIP 2017」列队
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...
- Python——13定制类
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——60(项目四、立体类族共有的抽象类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- windows 10 右键菜单注册表位置
1. 查找 1.1. 打开注册表 # 1. 使用快捷键打开 “运行” win + r # 2. 在 “运行” 中输入 regedit # 3. 回车 1.2. 点击 查找 # 1. 方法 1 : 点击 ...
- Web中间件常见漏洞总结
一.IIS中间组件: 1.PUT漏洞 2.短文件名猜解 3.远程代码执行 4.解析漏洞 二.Apache中间组件: 1.解析漏洞 2.目录遍历 三.Nginx中间组件: 1.文件解析 2.目录遍历 3 ...
- 微信小程序从开发至发布的流程
今天在公司将这几天开发的小程序,进行版本上线,在这里记录下. 首先,将微信开发工具里的代码上传到微信小程序平台里,如下所示 之后,在微信小程序平台进行审核提交,填写相应的信息即可,注意,审核提交分为紧 ...
- .NET Core 获取主机运行资源的库
简介 CZGL.SystemInfo 是一个支持 Windows 和 Linux 的资源信息获取库,用于获取系统环境.机器资源信息.系统资源使用情况. Nuget 搜索 CZGL.SystemInfo ...
- Yuchuan_Linux_C 编程之十 进程及进程控制
一.整体大纲 二.基础知识 1. 进程相关概念 1)程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁....) 进程,是一个抽象的概念,与 ...
- 『配置』服务器搭建 Office Online Server2016 实现文档预览
博主有话说:这个过程我遇到了很多错误,所以出了一个错误整理文章,所以当你在配置过程中遇到了问题,可以先去这篇文章里找找!加油! 先打开我吧:https://www.cnblogs.com/pukua/ ...
- angular -——组件样式修改不成功
angular组件样式修改不成功! 自己定义的css可以成功 组件的不行 style在模板字符串里 直接没有 class 是显示的 但是样式不生效 加上面 即可,为什么?我也不太清楚.有知道答案的请回 ...