C. Permutation Game(dfs记忆化博弈简洁版本)
发布日期:2021-06-30 10:17:53 浏览次数:2 分类:技术文章

本文共 1037 字,大约阅读时间需要 3 分钟。

因为以前写过类似的博弈,所以很快想出来了

因 为 从 点 i 出 发 , 假 设 可 以 去 点 x 1 , x 2 , x 3 . . . . . . . 因为从点i出发,假设可以去点x_1,x_2,x_3....... i,x1,x2,x3.......

在 能 去 的 这 些 路 径 下 , 只 要 有 一 条 是 必 胜 路 径 就 赢 了 在能去的这些路径下,只要有一条是必胜路径就赢了 ,

所 以 设 d p [ i ] 为 硬 币 在 i 位 置 先 手 是 否 必 胜 所以设dp[i]为硬币在i位置先手是否必胜 dp[i]i

所 以 对 于 每 个 位 置 s , 向 s + a [ s ] , s + 2 a [ s ] . . . 连 边 所以对于每个位置s,向s+a[s],s+2a[s]...连边 s,s+a[s],s+2a[s]...

当 然 也 要 对 s − a [ s ] , s − 2 a [ s ] 连 边 ( 在 满 足 移 动 条 件 的 情 况 下 ) 当然也要对s-a[s],s-2a[s]连边(在满足移动条件的情况下) sa[s],s2a[s]()

接下来就好办了,无脑dfs就行

也 许 你 听 的 不 是 很 明 白 , 没 关 系 , 代 码 很 好 理 解 , 简 短 也许你听的不是很明白,没关系,代码很好理解,简短 ,,,

#include 
using namespace std;const int maxn=2e5+10;int n,a[maxn],dp[maxn];//表示先手是否能赢 vector
vec[maxn];int dfs(int u){ if(dp[u]!=-1) return dp[u]; int flag=0; for(int i=0;i
> n ; for(int i=1;i<=n;i++) cin >> a[i]; for(int i=1;i<=n;i++) { for(int j=i+a[i];j<=n;j+=a[i]) if(a[i]
=1;j-=a[i]) if(a[i]

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107181300 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:I. Palindrome Pairs(字符哈希)
下一篇:C#之(创建类,类方法)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月25日 09时07分53秒