传送门: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 26int 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] != -1) return dp[u][v][c];for (int x = 1; x <= n; x++) {if (adj[u][x] >= c && !dfs(v, x, adj[u][x]))return dp[u][v][c] = 1;}return dp[u][v][c] = 0;
}int main(void)
{scanf("%d%d", &n, &m);memset(adj, -1, sizeof(adj));memset(dp, -1, sizeof(dp));while (m--) {int u, v;char ch;scanf("%d%d %c", &u, &v, &ch);adj[u][v] = ch - 'a';}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (dfs(i, j, 0)) putchar('A');else putchar('B');}putchar('\n');}return 0;
}

转载于:https://www.cnblogs.com/siuginhung/p/8401458.html

Codeforces 918D/917B - MADMAX相关推荐

  1. Codeforces Round #459 (Div. 2)题解

    补题 codeforces 918C 题意 给定一个含有通配符?和()的字符串,问有多少子串是括号匹配的 解题思路 首先考虑不用栈求括号匹配的方法: bool solve(char* s) {int ...

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

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

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

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

  4. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  5. codeforces的dp专题

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

  6. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  7. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  8. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  9. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

最新文章

  1. 因子分析数据_Excel数据分析案例:用Excel做因子分析
  2. matlab学习记录之基本操作整理
  3. CentOs下搭建GitLab
  4. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
  5. java 正则匹配_正则表达式真的很强大,可惜你不会写
  6. Linux内核之capabilities能力
  7. centos7 配置阿里yum源
  8. html实现点击下载文件
  9. 玩转b站:实用的b站工具合集
  10. Jenkins 更换插件源
  11. 2021级新生个人训练赛第37场
  12. 用Python把图片转成字符画
  13. 快速画出哈夫曼树/霍夫曼树/最优树
  14. 谷歌学术国内镜像网址收集-查文献
  15. 初识ecshop小京东(1)——认识路由
  16. LeetCode 1823. 找出游戏的获胜者
  17. 信息检索——BM25算法实现(自己写)
  18. Linux 安装docker教程
  19. 【高防服务器租用】这里有一份服务器租用攻略,请收好!
  20. [第六届蓝桥杯省赛C++B组]三羊献瑞

热门文章

  1. node-vue前后端分离记录
  2. java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会
  3. SharePoint 2013 Designer 自己定义操作菜单
  4. zend server 配置问题 ZendEnablerConf.xml
  5. asp.net faq: 在html文件中,用js获取session
  6. 一键Ghost 脱机下载不再愁
  7. JavaScript对象系统说明图
  8. Python架构(一)
  9. redis 相关操作
  10. Pytorch自定义Dataset和DataLoader去除不存在和空的数据