博弈
文章平均质量分 90
ez_lcw
这个作者很懒,什么都没留下…
展开
-
【XSY3990】Alice 和 Bob 双在玩游戏(博弈,dp,拓扑,背包)
题面Alice 和 Bob 双在玩游戏题解注意到这里一个人无法操作后,另一个人也不一定无法操作(即不像普通的取石子游戏一样),所以考虑转化一下他们各自的最优策略:双方都想让自己比对方尽可能多移动一些步。然后注意到每一颗石子都是相互独立的,即一个点上多一颗石子不会影响其他石子。所以考虑设 fif_ifi 表示:若在 iii 节点上多放一颗棋子,在双方都使用最优策略的情况下,Alice 能比 Bob 最多多走多少步。(fif_ifi 可能是负数,因为 iii 节点的颜色是不确定的)容易得到转移方原创 2021-04-06 07:37:44 · 943 阅读 · 0 评论 -
【XSY3951】简单的博弈题(博弈,dp,组合数,容斥)
题面简单的博弈题题解对于贪心的对手的情况,田忌赛马即可。对于随机的对手,发现使用任何策略都不影响结果。那我们只需要选一种自己数字的排列并固定下来,再去和对手的数字的 m!m!m! 种全排列匹配即可。暴力枚举全排列是不可接受的,考虑自己选一种特殊的数字排列固定,以优化计算。考虑将自己的数字排序后形成的排列为 a1,a2,⋯ ,ama_1,a_2,\cdots,a_ma1,a2,⋯,am,不妨设对手的数字中有 sis_isi 个小于 aia_iai。设 dp[i][j]dp[i][j]d原创 2021-03-15 21:39:25 · 122 阅读 · 0 评论 -
【XSY3949】取石子游戏(博弈,线段树)
我们把一个有 nnn 个石子, Alice 每次能拿 aaa 个, Bob 每次能拿 bbb 个的堆称为状态 (n,a,b)(n,a,b)(n,a,b)。石子数太大的时候不利于分析,尝试简化一下:可以证明状态 (n,a,b)(n,a,b)(n,a,b) 的结果同 (n mod (a+b),a,b)(n\bmod (a+b),a,b)(nmod(a+b),a,b) 状态的结果相同。所以我们只需对每一个 n←n mod (a+b)n\gets n\bmod(a+b)n←nmod(a+b),然后只考虑 n&l原创 2021-03-07 09:58:08 · 195 阅读 · 0 评论 -
【CSP2020】贪吃蛇(博弈,结论,双端队列)
Subtask 1:55pts55pts55ptsn≤2000n\leq 2000n≤2000。这就变成了一道模拟题了呀。对于每一轮,先假设最大的吃了最小的,然后往下递归每一轮,并设置数组 alivealivealive,维护这之后会有哪些蛇活着。在回溯的时候,如果最大蛇的发现它自己被吃了,就撤销吃这个动作,并重新更新 alivealivealive 数组。可以用 set维护,时间复杂度 O(n2)O(n^2)O(n2)。#include<bits/stdc++.h>#define原创 2020-11-17 13:54:07 · 539 阅读 · 0 评论 -
【AGC010E】Rearranging(博弈,图论,拓扑排序)
考场上想了很久才想到做法,然后考完后又想了很久,加上看了一下一些大佬的博客和 Atcoder 的官方题解,才完整地证明了整个做法的正确性。综合了一下,在这里详细阐述:首先发现如果两个数不互质而且相邻,那么他们之间的相对位置不会改变。(就是本来在左边的不能跑到右边去)考虑如果先手给出的排列是 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,⋯,an。然后对于 i<ji<ji<j,如果 gcd(ai,aj)≠1\gcd(a_i,a_j)\neq 1gcd(a原创 2020-10-04 21:12:22 · 241 阅读 · 0 评论 -
【SDOI201】黑白棋 /【XSY3064】小奇的博弈(博弈,nim,dp,组合数)
显然,如果白棋往左,黑棋往右,最后肯定会两两碰在一起,就像这样:红框框起来的是会碰在一起的棋子。(我们把会碰到一起的棋子称为一对棋子)如下图就是碰在一起的一种情况:那么现在假设是 AAA 遇到了这种情况,那么无论他操作的是白棋或黑棋,他肯定会输。因为另一个人可以操控棋子跟着 AAA 的棋子走,一直保持棋子两两紧逼的状态,直到所有棋子都堆在一边,这时 AAA 就无路可走了,失败。不妨设开始前每对棋子之间的距离为 a1,a2,…,ak2a_1,a_2,\dots,a_{\frac{k}{2}}a1原创 2020-08-14 19:09:38 · 197 阅读 · 0 评论 -
KPGAME - A game with probability(概率dp,博弈)
先考虑一下如果我想赢得游戏,我会采取的最优策略是什么。首先,想赢得游戏就是要取到最后一个石子,每次抛硬币相当于给你一次机会,每次机会都有相同概率取到石子,显然,最优策略就是让我最后一次取石子的机会越多。如何让机会最多?当然是取最后一个石子时,我先抛硬币,这样我的机会就越多。也就是说,我不想取倒数第二个石子。因为如果是我取了倒数第二个石子的话,取最后一个石子时先抛硬币的就是对手了。那么就可以考虑 dp 了:设 dp(i,j=0/1,k=0/1)dp(i,j=0/1,k=0/1)dp(i,j=0/1,k=原创 2020-07-28 19:12:46 · 311 阅读 · 0 评论