Codeforces 917B MADMAX (DP+博弈)
<题目链接>
题目大意:
给定一个DAG图,其中图的边权是给定的字符所对应的ascii码,现在A先手,B后手,每次沿DAG图走一步,但是第i次走的边权一定要大于等于第i-1次走的边权(这里是值两个人一起的第$i$次,不是一个人走动的第$i$次),最先无法走动的人输。让你对$A,B$的起始位置邻接矩阵$(i,j)$(代表A从$i$点出发,$B$从$j$点开始出发),对应给出他们的胜负情况,如果A胜,输出A,反之,输出B。
解题分析:
$dp[x][y][k]$表示先手$x$,后手$y$,边权为$k$对应的胜负情况。
对于$x$所有能够直接到达的点$v$,状态转移为$dp[y][v][nowval]$,前一个状态的后手$y$变成了当前的先手状态,$nowval$表示$x->v$的边权。
如果存在至少一个$v$,使得$dp[y][v][nowval]$为必败状态,则上一个状态$dp[x][y][k]$为必胜状态(因为他们都是选择最优的情况走)。
$dp[x][y][k]=0$表示先手必败,反之则必胜。
#include <bits/stdc++.h>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define fi first
#define se second
#define pb push_back
const int N = ; int dp[N][N][];
typedef pair<int,int>P;
vector<P>G[N];
int n,m; bool DP(int x,int y,int k){
if(dp[x][y][k]!=-)return dp[x][y][k];
for(int i=;i<G[x].size();i++){
int v=G[x][i].fi,cost=G[x][i].se;
if(cost>=k && DP(y,v,cost)==) //如果下一步存在先手必败的情况,则这一步先手必胜
return dp[x][y][k]=;
}
return dp[x][y][k]=; //为0表示先手必败
}
int main(){
cin>>n>>m;
rep(i,,m) {
int u,v;char c;cin>>u>>v>>c;
G[u].pb(P(v,c));
}
memset(dp,-,sizeof dp);
rep(i,,n) rep(j,,n){
DP(i,j,);
}
rep(i,,n) {
rep(j,,n)
printf("%c",dp[i][j][]?'A':'B');
puts("");
}
}
Codeforces 917B MADMAX (DP+博弈)的更多相关文章
- 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]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...
- CodeForces 918D MADMAX(博弈+记忆化搜索)
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- Codeforces Round #459 (Div. 2) D. MADMAX DFS+博弈
D. MADMAX time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- Codeforces 918D/917B - MADMAX
传送门:http://codeforces.com/contest/918/problem/D 本题是一个组合游戏问题——DAG上的动态规划问题. 有一张有向无环图(DAG).有两个玩家在这张图上进行 ...
- Codeforces 918D MADMAX 图上dp 组合游戏
题目链接 题意 给定一个 \(DAG\),每个边的权值为一个字母.两人初始各占据一个顶点(可以重合),轮流移动(沿着一条边从一个顶点移动到另一个顶点),要求每次边上的权值 \(\geq\) 上一次的权 ...
- CodeForces 1099F - Cookies - [DFS+博弈+线段树]
题目链接:https://codeforces.com/problemset/problem/1099/F Mitya and Vasya are playing an interesting gam ...
- Codeforces 918D - MADMAX
918D - MADMAX 思路: dp+记忆化搜索 状态:dp[i][j][w]表示先手在i节点,后手在j节点,这一轮的字母为w的结果,如果为true,则表示先手必赢,否则后手必赢. 状态转移:如果 ...
随机推荐
- jenkins jacoco
1.pom中加jacoco依赖 <dependency> <groupId>org.jacoco</groupId> <artifactId>jacoc ...
- unix下网络编程之I/O复用(三)
poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...
- My97DatePicker 和转换 数据库中日期(/Date(1351699200000)/) 的格式
一 转换 数据库中日期(/Date(1351699200000)/) 的格式: C#中转换日期格式 var date=com.CREATEDATETIME.ToString(); JavaScrip ...
- MD5加密 及获得密码盐
MD5加密 及获得密码盐 using System; using System.Collections.Generic; using System.Configuration; using Syste ...
- Java: What is the difference between <init> and <clinit>?
Stack Overflow 上的一个问题:Java: What is the difference between <init> and <clinit>? JVM Sp ...
- myelipse中部署路径deploy location出现错误
背景: 因java_web项目中的所有代码以及资源文件突然无法提交,在尝试过诸多方法无果后,果断删除项目重新将down下来.启动Tomcat无问题,使用原来的访问连接报错.经检查发现加载至Tomcat ...
- Mongodb 5节点异地两中心故障转移恢复测试案例
Mongodb5节点异地两中心故障转移恢复测试案例 架构方式:5节点,主中心(2数据1仲裁),备中心(1数据1仲裁) 1基本情况 操作系统:Red Hat Enterprise Linux Serve ...
- HDLM命令dlnkmgr详解之一__命令格式
dlnkmgr命令格式 dlnkmgr operation [parameter [parameter-value]] dlnkmgr - The command name. operation - ...
- #测试两种不同的SVM,rbf的核真是太棒了(一种会拐弯的边界)
from sklearn import datasets import numpy as np X, y = datasets.make_blobs(n_features=2, centers=2) ...
- UML设计九种图例
一.作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分. UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语 ...