CF917B MADMAX
CF917B MADMAX
题意:
Alice和Bob有一个n个点m条边的DAG,每条边上有一个小写英文字母表示权值,Alice和Bob每人有一个棋子,每个人放在一个节点上(可以放在同一个节点上)。 第一轮Alice可以沿一条边把棋子移到一个相邻的节点上,之后Bob沿一条边移动棋子,以此类推,规则规定:每一次移动经过的边的ASCII码单调不降(即,若Alice沿’c’走了一步,Bob只能沿’c’或’c’之后的字母走,然后Alice又要沿Bob走过的字母之后的字母走…)。不能走的人输掉这盘游戏。 现在他们想知道,给定初始位置,两人都按最优策略,谁会赢?
题解:
枚举起点,正常模拟博弈过程
sg[x][y][kw]:先手为x,后手为y,字母限制不超过kw的这个状态的sg值
如果sg==0说明先手输,sg=1说明先手赢
v是u的下一个状态
如果全部sg[v]是1,sg[u]为0
如果存在sg[v]是0,sg[u]为1
上面这两个条件怎么实现呢?
我们令sg[u]为0,然后去找v,如果有一个v使得sg[v]是0,说明sg[v]=1
当不能走时即输掉比赛,此时sg为0
dfs模拟过程,记忆化搜索+dp实现
复杂度O(26 * N^2 + 26 * N * M)
26 * N * N是枚举起点
26 * N * M是dfs
代码:
#include<bits/stdc++.h>
#define INF (1<<25)
#define MAXN 105
#define LL long long
using namespace std;int N,M;struct edge{int v,w;edge(int v=0, int w=0):v(v), w(w){}
};vector<edge> adj[MAXN];int sg[MAXN][MAXN][26];
//sg = 0/1 lose/win
//sg[u] = 0, if all sg[v] = 1
//sg[u] = 1, if some sg[v] = 0 bool dfs(int x, int y, int kw){if(sg[x][y][kw] != -1) return sg[x][y][kw];sg[x][y][kw] = 0;int v,w;for(int k=0;k<adj[x].size();k++){v = adj[x][k].v;w = adj[x][k].w;if(w < kw) continue;//必须满足字母非上升序列 if(dfs(y,v,w)==0){sg[x][y][kw] = 1;break;}}return sg[x][y][kw];
}int main(){cin>>N>>M;int u,v;char c;for(int i=1;i<=M;i++){cin>>u>>v>>c;adj[u].push_back(edge(v,c-'a'));}memset(sg,-1,sizeof(sg));//初始化为-1 for(int i=1;i<=N;i++){for(int j=1;j<=N;j++){if(dfs(i,j,0)) cout<<"A";else cout<<"B";}cout<<endl;}return 0;
}
CF917B MADMAX相关推荐
- Jozky 刷题目录
文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...
- 博弈论(基础概念+例题)
博弈论(b站视频) 文章目录 一些概念 以Nim游戏为例 Nim游戏介绍 定义 必败/必胜局面 必败/必胜局面的判定引理 Nim游戏判定引理的等价命题 有向图游戏 对判定引理的数学描述-Sg函数 有向 ...
- Codeforces 918D/917B - MADMAX
传送门:http://codeforces.com/contest/918/problem/D 本题是一个组合游戏问题--DAG上的动态规划问题. 有一张有向无环图(DAG).有两个玩家在这张图上进行 ...
- codeforces D.MADMAX 动态规划、记忆化搜索
题意 给出一个DAG,每条边上有权重(权重是小写字母的ASCII码),现在两位同学A和B分别位于某两点上(可以相同),其中A和B轮流走,但是每人所走的边权不能变小,走到不能走为止就输. A先走,询问最 ...
- Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...
- 匿名内部类和匿名类_匿名schanonymous
匿名内部类和匿名类 Everybody loves a fad. You can pinpoint someone's generation better than carbon dating by ...
- 系统运维tips 3 之 innodb
mysql 5.1.46 安装后,在配置文件my.cnf启用innodb,然后初始化数据库mysql_install_db时报错 usr/local/mysql/libexec/mysqld: unk ...
- [No0000197]Windows用户都应该知道的运行命令
通过"运行"命令,运行Windows丰富工具的方法.如果您知道工具或任务的相应"运行"命令,那么您就知道访问所述工具或任务的最快方法. 以下是我们最喜欢的Run ...
- 魔兽世界az端和TC端有什么区别 Mangos,TC,SW,AZ,AC的关系
魔兽世界az端和TC端有什么区别 Mangos,TC,SW,AZ,AC的关系 大家好我是艾西,魔兽世界现在很多小伙伴对AZ端和TC端不是很能理解什么意思有什么区别,小编查询了大量的资料简单跟大家说一下 ...
最新文章
- five months plan
- matlab抓取股票数据,Matlab经过sina web接口获取个数即时股票数据函数实现代码
- RSA算法原理——(1)目前常见加密算法简介
- 台式计算机机箱都一样吗,别以为组装台式机很简单,机箱选择大有学问
- 【算法系列之四】柱状图储水
- 【UML】构件图Component diagram(实现图)(转)
- 为全力发展AIOT,小米把松果电子分拆重组了
- 30 网站项目建设流程概述
- Kap for Mac(轻量级屏幕录像机)免费版
- 收下这10个终身学习的资源号,Max你的工作效率
- 如何用OD的跟踪功能分析虚拟机保护
- 微信开发api文档地址
- Android8.0以上,打开uiautomatorviewer.bat,报错Unexpected error while obtaining Ul hierarchy
- iPhone屏幕尺寸、statusBar、navigationBar、tabBar高度对比
- 记录自己在pyqt5用电脑摄像头拍照并保存照片过程中发现的问题
- Pr:添加黑边效果的方法
- php需要做临时表嘛,php中使用临时表查询数据的一个例子
- 用浏览器下载一个文件,当点击该文件(原理)
- 微信小程序注册相关资料
- 91 q.v4p.co index.php,静觅丨崔庆才的个人站点
热门文章
- 这本造价500万的“黑科技”日历,用377张爆美插画给你365天理想生活
- 猴子偷桃php代码,C++实现猴子吃桃的示例代码
- php2612,达人曝光LGLSNJ2612AR质量好吗?怎么样呢?体验报告揭秘
- oracle 12c 多线程,Oracle 12c(12.1)中性能优化功能增强之通过参数THREADED_EXECTION使用多线程模型...
- java static new_java静态类new的对象是否能被回收?
- netcore读取json文件_【NET Core】.NET Core中读取json配置文件
- python 百度ai批量识别_Python基于百度AI的文字识别的示例
- python装饰器源代码_13-Python-装饰器
- 算法题目——最长连续序列
- mysql qps如何查看_一款查看mysql QPS的脚本