[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个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...
随机推荐
- Alberto Del Bimbo:为什么说研究员要有想象力?
Del Bimbo:为什么说研究员要有想象力?" title="Alberto Del Bimbo:为什么说研究员要有想象力?"> 说到科研,与日本式的&q ...
- Spring源码分析-BeanFactoryPostProcessors 应用之 PropertyPlaceholderConfigurer
BeanFactoryPostProcessors 介绍 BeanFactoryPostProcessors完整定义: /** * Allows for custom modification of ...
- vector 循环里删除多个元素
; i < (int)vecLines.size(); i++) { AcDbLine * l1 = vecLines[i]; if (l1 == NULL) { continue; } //记 ...
- Java入门教程九(封装继承多态)
封装 封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏.做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(s ...
- Mysql或者SQL Server数据库的运行机制和体系架构
一.MySQL主要分为以下几个组件: 连接池组件 管理服务和工具组件 SQL接口组件 分析器组件 优化器组件 缓冲组件 插件式存储引擎 物理文件 二.MySql的组成:Mysql是由SQL接口,解析器 ...
- Ansible-基本概述
为什么要自动化运维 纯手动软件安装部署方式 我们以 10 台机器部署 Nginx 为例.部署步骤如下: 1.通过 ssh 登录一台机器: 2.yum install -y nginx 或者 获取安装包 ...
- 🤢保护眼睛,从更换win电脑主题开始🤢
目的: win电脑主题颜色设置为
- spring boot 整合elasticsearch
1.导入jar包 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodi ...
- seo搜索优化教程05-SEO常用专业术语
SEO常用的专业术语很多,星辉信息科技专门抽空进行了整理,主要如下:. SEO 根据搜索引擎规则来进行搜索引擎优化,进而使得在搜索结果中获得较好的排名 关键词 关键词也叫keywords,表示在搜索引 ...
- VOIP RTP RTSP 实现 Baresip 源码分析
RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序.同时还有 MTU 限制. RTCP 用来配合 RTP 提供,传输报告,会话建立和退出. 一大批参考规范 * ...