Codeforces 918D/917B - MADMAX
传送门:http://codeforces.com/contest/918/problem/D
本题是一个组合游戏问题——DAG上的动态规划问题。
有一张有向无环图(DAG)。有两个玩家在这张图上进行一个游戏:初始时,玩家A、B各占据一个结点,之后轮流沿着有向边移动;移动时的边权是不下降的。无法移动者输。
请打印一个n×n矩阵,这个矩阵的元代表获胜方(A/B),其i行j列元的含义如下:玩家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相关推荐
- Codeforces Round #459 (Div. 2)题解
补题 codeforces 918C 题意 给定一个含有通配符?和()的字符串,问有多少子串是括号匹配的 解题思路 首先考虑不用栈求括号匹配的方法: bool solve(char* s) {int ...
- 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 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...
- Codeforces 题目合集+分类+代码 【Updating...】【361 in total】
961A - Tetris 模拟 ...
- codeforces的dp专题
1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...
- 【codeforces 812C】Sagheer and Nubian Market
[题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...
- CodeForces 获得数据
针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...
最新文章
- 因子分析数据_Excel数据分析案例:用Excel做因子分析
- matlab学习记录之基本操作整理
- CentOs下搭建GitLab
- Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
- java 正则匹配_正则表达式真的很强大,可惜你不会写
- Linux内核之capabilities能力
- centos7 配置阿里yum源
- html实现点击下载文件
- 玩转b站:实用的b站工具合集
- Jenkins 更换插件源
- 2021级新生个人训练赛第37场
- 用Python把图片转成字符画
- 快速画出哈夫曼树/霍夫曼树/最优树
- 谷歌学术国内镜像网址收集-查文献
- 初识ecshop小京东(1)——认识路由
- LeetCode 1823. 找出游戏的获胜者
- 信息检索——BM25算法实现(自己写)
- Linux 安装docker教程
- 【高防服务器租用】这里有一份服务器租用攻略,请收好!
- [第六届蓝桥杯省赛C++B组]三羊献瑞