题意

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


题解

比较明显是一个DP,定义dp[i][j][c]表示轮到i点的人走,另一个人在j点,下一次要走的边的权重必须>=c,i点的人是否能赢

递推方程

dp[i][j][c]=(!dp[j][nex1][Wi,nex1])or(!dp[j][nex2][Wi,nex2])or...dp[i][j][c] = (!dp[j][nex_1][W_i,nex_1]) or (!dp[j][nex_2][W_i,nex_2])or...dp[i][j][c]=(!dp[j][nex1​][Wi​,nex1​])or(!dp[j][nex2​][Wi​,nex2​])or...

也就是说只要有一个可以转移到的状态,使得该状态是输态,那么必赢。


代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int n,m;
int G[111][111];
bool dp[111][111][30];
int outdeg[111];
int vis[111][111][30];
bool dfs(int u,int v,int c){if(vis[u][v][c]) return dp[u][v][c];bool f = 0;for(int nex = 1;nex <= n;++nex){if(!G[u][nex] || G[u][nex] < c) continue;f = f || (!dfs(v,nex,G[u][nex]));}vis[u][v][c] = 1;return dp[u][v][c] = f;
}
int main(){cin>>n>>m;for(int i = 0;i < m;++i){int u,v;char c;scanf(" %d %d %c",&u,&v,&c);G[u][v] = c-'a'+1;}for(int i = 1;i <= n;++i){for(int j = 1;j <= n;++j){if(dfs(i,j,0))putchar('A');elseputchar('B');}puts("");}return 0;
}

codeforces D.MADMAX 动态规划、记忆化搜索相关推荐

  1. [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]

    [问题描述][困难] [解答思路] 1. 记忆化搜索 时间复杂度:O(n^3) 空间复杂度:O(n^2) class Solution {public int[][] rec;public int[] ...

  2. 专题7:动态规划 记忆化搜索

    1. 什么是动态规划 ? 这是算法导论对动态规划的定义: 动态规划( dynamic programming,常简称为 dp ) 与分治方法相似,都是通过组合子问题的解来求解原问题( 在这里,&quo ...

  3. BZOJ_P2461 [BeiJing2011]符环(动态规划/记忆化搜索)

    BZOJ传送门 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 113 Solved: 59 [Submit][Status][Discuss] Des ...

  4. 记忆化搜索 Memorization Search

    记忆化搜索 Memorization Search 什么是记忆化搜索 记忆化搜索函数的三个特点 记忆化搜索 vs 动态规划 三种适用于DP的场景 三种不适用于DP的场景 Examples: Leetc ...

  5. Codeforces Round #336 (Div. 2) D. Zuma 记忆化搜索

    D. Zuma 题目连接: http://www.codeforces.com/contest/608/problem/D Description Genos recently installed t ...

  6. 动态规划:记忆化搜索

    记忆化搜索和递推都是为了解决子问题重复计算而产生的 虽然动态规划的转移图是一个DAG,但是一个状态可以被其他的状态复用多次 因此为了提高动态规划的效率,记忆化搜索便产生了 但是有时候,状态转移图是不容 ...

  7. [蓝桥杯]算法提高 第二点五个不高兴的小明(记忆化搜索||动态规划)

    问题描述 有一条长为n的走廊,小明站在走廊的一端,每次可以跳过不超过p格,每格都有一个权值wi. 小明要从一端跳到另一端,不能回跳,正好跳t次,请问他跳过的方格的权值和最大是多少? 输入格式 输入的第 ...

  8. 【BZOJ1048】分割矩阵(记忆化搜索,动态规划)

    [BZOJ1048]分割矩阵(记忆化搜索,动态规划) 题面 BZOJ 洛谷 题解 一个很简单的\(dp\),写成记忆化搜索的形式的挺不错的. #include<iostream> #inc ...

  9. [Leetcode][第322题][JAVA][零钱兑换][回溯][记忆化搜索][动态规划]

    [问题描述][中等] [解答思路] 1. 递归(超时) class Solution {int res = Integer.MAX_VALUE;public int coinChange(int[] ...

  10. 记忆化搜索=搜索的形式+动态规划的思想(来自百度百科)

    记忆化搜索=搜索的形式+动态规划的思想 记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存. 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态. ...

最新文章

  1. JDBC简单操作步骤总结
  2. [推荐]C#快速开发3d游戏工具--Unity3d
  3. excel上传到linux乱码,上载excel文件名字乱码有关问题处理
  4. C# 不能从数据库更新实体
  5. 黄金法则----比较法则
  6. “365算法每日学计划”:01打卡
  7. C++ Function语意学
  8. C++ floor、ceil、round函数的区别
  9. 对象方法(包含es6)
  10. MONGOOSE – 让NODE.JS高效操作MONGODB(转载)
  11. SSIM结构相似性算法
  12. HDOJ 4622 Reincarnation (hash)
  13. MySQL无法启动 系统发生1058错误
  14. Java实现找回密码
  15. 【Tushare 大数据社区——解救你的财经数据需求】
  16. 如何禁用/启用笔记本内置键盘?
  17. miui 8.5 android,两年前的小米5突遭MIUI9 8.5.3更新!妥妥上安卓8.0
  18. Qt 中获取字体的像素高度和宽度
  19. 小技巧 - 如何查询医保卡号?
  20. 201801002_电力系统调频

热门文章

  1. 东南大学计算机网络_东南大学,2020年东南大学高考录取分数线分析
  2. linux强大功能,linux grep和find 的强大功能
  3. leetcode239. 滑动窗口最大值(思路+详解)
  4. 一文梳理JavaScript中常见的七大继承方案
  5. Java内置数据类型
  6. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
  7. Mongodb查询分析器解析
  8. mysql递归查询 缓存_MySQL-递归查询方法解析
  9. Educational Codeforces Round 106 (Rated for Div. 2) C. Minimum Grid Path 奇偶 + 思维
  10. Codeforces Round #703 (Div. 2) D . Max Median 二分 +思维