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相关推荐

  1. Jozky 刷题目录

    文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...

  2. 博弈论(基础概念+例题)

    博弈论(b站视频) 文章目录 一些概念 以Nim游戏为例 Nim游戏介绍 定义 必败/必胜局面 必败/必胜局面的判定引理 Nim游戏判定引理的等价命题 有向图游戏 对判定引理的数学描述-Sg函数 有向 ...

  3. Codeforces 918D/917B - MADMAX

    传送门:http://codeforces.com/contest/918/problem/D 本题是一个组合游戏问题--DAG上的动态规划问题. 有一张有向无环图(DAG).有两个玩家在这张图上进行 ...

  4. codeforces D.MADMAX 动态规划、记忆化搜索

    题意 给出一个DAG,每条边上有权重(权重是小写字母的ASCII码),现在两位同学A和B分别位于某两点上(可以相同),其中A和B轮流走,但是每人所走的边权不能变小,走到不能走为止就输. A先走,询问最 ...

  5. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

  6. 匿名内部类和匿名类_匿名schanonymous

    匿名内部类和匿名类 Everybody loves a fad. You can pinpoint someone's generation better than carbon dating by ...

  7. 系统运维tips 3 之 innodb

    mysql 5.1.46 安装后,在配置文件my.cnf启用innodb,然后初始化数据库mysql_install_db时报错 usr/local/mysql/libexec/mysqld: unk ...

  8. [No0000197]Windows用户都应该知道的运行命令

    通过"运行"命令,运行Windows丰富工具的方法.如果您知道工具或任务的相应"运行"命令,那么您就知道访问所述工具或任务的最快方法. 以下是我们最喜欢的Run ...

  9. 魔兽世界az端和TC端有什么区别 Mangos,TC,SW,AZ,AC的关系

    魔兽世界az端和TC端有什么区别 Mangos,TC,SW,AZ,AC的关系 大家好我是艾西,魔兽世界现在很多小伙伴对AZ端和TC端不是很能理解什么意思有什么区别,小编查询了大量的资料简单跟大家说一下 ...

最新文章

  1. five months plan
  2. matlab抓取股票数据,Matlab经过sina web接口获取个数即时股票数据函数实现代码
  3. RSA算法原理——(1)目前常见加密算法简介
  4. 台式计算机机箱都一样吗,别以为组装台式机很简单,机箱选择大有学问
  5. 【算法系列之四】柱状图储水
  6. 【UML】构件图Component diagram(实现图)(转)
  7. 为全力发展AIOT,小米把松果电子分拆重组了
  8. 30 网站项目建设流程概述
  9. Kap for Mac(轻量级屏幕录像机)免费版
  10. 收下这10个终身学习的资源号,Max你的工作效率
  11. 如何用OD的跟踪功能分析虚拟机保护
  12. 微信开发api文档地址
  13. Android8.0以上,打开uiautomatorviewer.bat,报错Unexpected error while obtaining Ul hierarchy
  14. iPhone屏幕尺寸、statusBar、navigationBar、tabBar高度对比
  15. 记录自己在pyqt5用电脑摄像头拍照并保存照片过程中发现的问题
  16. Pr:添加黑边效果的方法
  17. php需要做临时表嘛,php中使用临时表查询数据的一个例子
  18. 用浏览器下载一个文件,当点击该文件(原理)
  19. 微信小程序注册相关资料
  20. 91 q.v4p.co index.php,静觅丨崔庆才的个人站点

热门文章

  1. 这本造价500万的“黑科技”日历,用377张爆美插画给你365天理想生活
  2. 猴子偷桃php代码,C++实现猴子吃桃的示例代码
  3. php2612,达人曝光LGLSNJ2612AR质量好吗?怎么样呢?体验报告揭秘
  4. oracle 12c 多线程,Oracle 12c(12.1)中性能优化功能增强之通过参数THREADED_EXECTION使用多线程模型...
  5. java static new_java静态类new的对象是否能被回收?
  6. netcore读取json文件_【NET Core】.NET Core中读取json配置文件
  7. python 百度ai批量识别_Python基于百度AI的文字识别的示例
  8. python装饰器源代码_13-Python-装饰器
  9. 算法题目——最长连续序列
  10. mysql qps如何查看_一款查看mysql QPS的脚本