传送门:http://codeforces.com/contest/918/problem/D

本题是一个组合游戏问题——DAG上的动态规划问题。

有一张有向无环图(DAG)。有两个玩家在这张图上进行一个游戏:初始时,玩家A、B各占据一个结点,之后轮流沿着有向边移动;移动时的边权是不下降的。无法移动者输。

请打印一个n×n矩阵,这个矩阵的元代表获胜方(A/B),其ij列元的含义如下:玩家A的初始位置为结点i,玩家B的初始位置为结点j

对于DAG上的组合游戏,可以考虑DP。

定义布尔变量dp(u,v,c),代表当先手的初始位置为结点u,后手的初始位置为结点v,且上一次移动的边权为c时,先手是否能移动。则:

若存在有向边<u,x>,使得c≤cost<u,x>,且dp(v,x,cost<u,x>)=0,于是,一旦先手到达结点x后,后手将无法移动:于是先手必胜,即dp(u,v,c)=1;否则先手必败,即dp(u,v,c)=0。

参考程序如下:

#include <stdio.h>
#include <string.h>
#define MAX_N 101
#define MAX_C 26 int n, m;
int adj[MAX_N][MAX_N];
int dp[MAX_N][MAX_N][MAX_C]; int dfs(int u, int v, int c)
{
if (dp[u][v][c] != -) return dp[u][v][c];
for (int x = ; x <= n; x++) {
if (adj[u][x] >= c && !dfs(v, x, adj[u][x]))
return dp[u][v][c] = ;
}
return dp[u][v][c] = ;
} int main(void)
{
scanf("%d%d", &n, &m);
memset(adj, -, sizeof(adj));
memset(dp, -, sizeof(dp));
while (m--) {
int u, v;
char ch;
scanf("%d%d %c", &u, &v, &ch);
adj[u][v] = ch - 'a';
}
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++) {
if (dfs(i, j, )) putchar('A');
else putchar('B');
}
putchar('\n');
}
return ;
}

Codeforces 918D/917B - MADMAX的更多相关文章

  1. Codeforces 918D - MADMAX

    918D - MADMAX 思路: dp+记忆化搜索 状态:dp[i][j][w]表示先手在i节点,后手在j节点,这一轮的字母为w的结果,如果为true,则表示先手必赢,否则后手必赢. 状态转移:如果 ...

  2. CodeForces 918D MADMAX(博弈+记忆化搜索)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  3. Codeforces 917B MADMAX (DP+博弈)

    <题目链接> 题目大意:给定一个DAG图,其中图的边权是给定的字符所对应的ascii码,现在A先手,B后手,每次沿DAG图走一步,但是第i次走的边权一定要大于等于第i-1次走的边权(这里是 ...

  4. Codeforces 918D MADMAX 图上dp 组合游戏

    题目链接 题意 给定一个 \(DAG\),每个边的权值为一个字母.两人初始各占据一个顶点(可以重合),轮流移动(沿着一条边从一个顶点移动到另一个顶点),要求每次边上的权值 \(\geq\) 上一次的权 ...

  5. 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 ...

  6. Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)

    D. MADMAX time limit per test1 second memory limit per test256 megabytes Problem Description As we a ...

  7. Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)

    题意 在一个有向无环图上,两个人分别从一个点出发,两人轮流从当前点沿着某条边移动,要求经过的边权不小于上一轮对方经过的边权(ASCII码),如果一方不能移动,则判负.两人都采取最优策略,求两人分别从每 ...

  8. 【Codeforces Round #459 (Div. 2) D】MADMAX

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] f[x][y][z][2] 表示第一个人到了点x,第二个人到了点y,当前轮的字母(1..26),当前轮到谁走的情况下,谁赢. 写个记 ...

  9. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

随机推荐

  1. apt --fix-broken install

    1 自动修复安装出现broken的package 但是,如果还是失败的话,就需要手动进行干预了.

  2. linux设备驱动模型之Kobject、kobj_type、kset【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74838165 版权声明:本文为博主原创文章,转载请注明http://blog.c ...

  3. Polymorphism (C# Programming Guide)

    https://msdn.microsoft.com/en-us/library/ms173152.aspx Polymorphism is often referred to as the thir ...

  4. SEL是啥玩意

    一.了解SEL前的准备-----isa指针简述 1.一个类就像一个 C 结构,NSObject 声明了一个成员变量: isa.由于 NSObject 是所有类的根类,所以所有的对象都会有一个 isa ...

  5. springMVC与freemarker整合

    准备好的环境:Maven工程整合好了ssm,即spring+springMVC+mybatis.接下来准备将springMVC与freemarker整合,以html文件为模板. 一,加入freemar ...

  6. hibernate基础学习---hierbnate2级缓存

    1:开启二级缓存sessionFactory需要安装jar包 2:在实体类配置文件添加(配置二级缓存).我的配置文件是Account.hbm.xml <?xml version="1. ...

  7. Unity 图形学 基础知识总结

    1. 渲染流水线     三大块:应用阶段,几何阶段,光栅化阶段                       渲染图元   顶点信息    GPU流水线     顶点数据=>     顶点着色器 ...

  8. [Swift通天遁地]二、表格表单-(14)实时调整表单元素的激活和失效

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  9. Boost.Build特点(译)

    Boost.Build Boost.Build makes it easy to build C++ projects, everywhere. Boost.Build让构建C++项目在任何地方都很容 ...

  10. 【Codeforces576E_CF576E】Painting Edges(可撤销并查集+线段树分治)

    题目 CF576E 分析: 从前天早上肝到明天早上qwq其实颓了一上午MC ,自己瞎yy然后1A,写篇博客庆祝一下. 首先做这题之前推荐一道很相似的题:[BZOJ4025]二分图(可撤销并查集+线段树 ...