====博弈论====
「已注销」
这个作者很懒,什么都没留下…
展开
-
HDU 2516 取石子游戏 (斐波那契博弈 Fibonacci Nim)
思路:斐波那契博弈的模板题。证明:证明转载自:http://blog.csdn.net/acm_cxlove/article/details/7835016有一堆个数为n的石子,游戏双方轮流取石子,满足:1) 先手不能在第一次把所有的石子取完;2) 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。约定取走最后一个石子的人为赢家,求必败态。这个和之前的 W原创 2016-08-15 15:17:22 · 1598 阅读 · 0 评论 -
HDU 1847 Good Luck in CET-4 Everybody!(简单sg函数)
思路:sg函数表示的状态转移。模板题,跟以前做的一样,有不懂的请看我以前写的别的题,或者去找找相关的资料。AC代码:#include <iostream>#include <cstdio>#include <string.h>using namespace std;int dp[1010];int sg(int n){ if(dp[n] != -1)return dp[n];原创 2016-08-13 10:34:46 · 294 阅读 · 0 评论 -
HDU 4597 Play Game (博弈 + 区间dp)
题意:Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个 只能从其中一个序列,选择两端中的一个拿走。他们都希望可以拿到尽量大 的数字之和,并且他们都足够聪明,每次都选择最优策略。Alice先选择,问 最终Alice拿到的数字总和是多少?思路:经典区间dp的变形,可以参考这道题:uva-10891 http://blog.csdn.net/wing_w原创 2016-08-26 22:01:52 · 492 阅读 · 0 评论 -
POJ 2484 A Funny Game (博弈)
原题网址:http://poj.org/problem?id=2484思路:1,当数量小于3时,先手必胜。 2,当大于三时,后手只要跟着先手在成中心对称的位置取子就行,如果总棋子数是偶数,后手每次与先手取相同数量的棋子,如果总棋子数是奇数,那么在第一轮选择与先手不同数量的棋子数,来使总数变成偶数。 代码很简单&&简洁,就不贴了。原创 2016-08-05 10:46:09 · 269 阅读 · 0 评论 -
HDU 5512 Pagodas (简单博弈 gcd)
题意:给你n,a,b三个数 a!=b{a != b} ,在 [1,n]{[1,n]} 这个范围内, 构造一个集合,这个集合初始只有 a,b{ a,b } 然后你可以通过加减两种运算对这个集合中的数据进行扩增,直到不能扩增。 注意限制条件:新的元素必须在 [1,n]{[1,n]} 内且最多出现一次 先不能行动的输。 问你先手Y和后手I谁赢?思路:找规律可以发现:在这个最终构建的集合里,最小间原创 2016-10-01 21:50:13 · 350 阅读 · 0 评论 -
POJ 3688 Cheat in the Game (博弈 dp)
题意:有俩人玩一个取石子的游戏,你是裁判。游戏中有W块石头和N张卡片,卡片上分别写着数字ai{a_i}。玩家随机抽走一张卡片,按卡片上的数字从石头堆中取走相应数量的石头,如果石头不够,玩家重新抽卡片,取走最后一块石头的玩家获胜;如果石头堆为空仍然未分出胜负,则拿回所有石头和卡片重新开始。现在先手玩家贿赂了你,请你帮他构造必胜条件。游戏中的卡片是固定的,但W可供你操作。问有多少小于或等于M的W满足要求原创 2016-09-04 16:17:04 · 550 阅读 · 0 评论 -
HDU 1525 Euclid's Game (博弈)
原题网址:http://acm.hdu.edu.cn/showproblem.php?pid=1525思路:假设现在的状态为(a,b),假设 a > b 不管怎么走,肯定会走到(b,a%b)。 1,如果a == b,那么到达这个状态的人获胜。 2,如果b < a <2 * b时,那么只能通过一种方法走。 3,如果 a >= 2*b,这时可以选择奇数走或者偶数走,但不管怎么走,始终要走到(b,a原创 2016-08-05 14:37:24 · 254 阅读 · 0 评论 -
POJ 1704 Georgia and Bob (博弈 Nim游戏变形)
原题网址:http://poj.org/problem?id=1704题意:给你一个一行无限列的棋盘,棋盘上有棋子,t组测试样例,每组输入棋子的数量N,然后下一行输入这N个棋子的位置分别在哪。女生先走,之后轮流。每人每次只能把棋子移动到它左边的位置,并且不能越过前一个棋子,比如在3,6的位置有棋子,那么如果你移动6的话就只能到5,4。思路:本来也向nim游戏的方向想了一下,一开始找转化的关键点,发现原创 2016-08-05 17:14:08 · 360 阅读 · 0 评论 -
HDU 1536 S-Nim (博弈 sg函数 Nim和)
原题网址:http://acm.hdu.edu.cn/showproblem.php?pid=1536思路:Nim的变形,只是对你每次选取的数量做了限制,但是其他的性质并没有改变,所以可以用sg函数解决; 又或者说,Nim游戏只是一种特例,事实上有多种问题都可以用sg函数解决。sg函数的定义:sg(x) = mex { sg(y) | x->y } //mex (minimal excludan原创 2016-08-06 16:28:58 · 348 阅读 · 0 评论 -
HDU 1079 Calendar Game (博弈 sg函数)
思路:sg函数的使用。注意点:1,注意有些状态是不能转移的,而不是转移到失败状态,所以在构建sg函数的时候应该仔细想好限制条件。比如 2001 10 8 ,2001 11 1,这两个都只能一天一天的转移而不能跳一个月,因为不合法。 2,AC代码:#include <iostream>#include <string.h>#include <cstdio>using namespace std;原创 2016-08-07 10:45:59 · 871 阅读 · 0 评论 -
HDU 5795 A Simple Nim (sg函数 打表)
思路:看到数据范围的一刹那就应该有一种暴力不能解的感觉。 再加上他说要分堆,可以把一堆分成三堆,这样也是一种状态的转移,不过,当堆里的石子数量很大的时候,可以分成三堆的情况是特别多的。。。这样的话在用sg函数进行深搜时估计会爆栈。。。 所以了,打表吧,用暴力的方式把前100个数的sg值都算出来,你会发现这么一个规律 if(n % 8 == 0) —— sg(n) = n + 1; if(n原创 2016-08-08 15:24:56 · 264 阅读 · 0 评论 -
HDU 3951 Coin Game (博弈)
题意:t个样例,每次给你n和k,n是一共有的硬币数,k是你每次最多取得硬币数。 注意:你如果想要取5个硬币(假设能取),那么你必须保证这些硬币是连续的,就是说这些硬币之间不能有空位。思路:跟之前的一道题思路差不多。 http://blog.csdn.net/wing_wuchen/article/details/52122914 当k为1时,直接判断奇偶来决定结果。 当k不为1时,如果先手不原创 2016-08-16 10:20:22 · 263 阅读 · 0 评论 -
HDU 1517 A Multiplication Game (博弈 NP图)
题意:回头再写。。题解:回头再写。。#include <bits/stdc++.h>typedef long long int lli;using namespace std;lli maxn = 1LL << 34;lli n;lli judge(lli l,lli r,lli flag){ if(l <= 1) return flag; if(flag == -1){原创 2016-08-15 18:01:12 · 142 阅读 · 0 评论 -
HDU 6105 Gameia (博弈)
思路:我们考虑当如果任意一个节点有两个叶子节点 那么Alice选这个点就赢了。 所以现在我们就只剩下每个树枝都是一长链的情况了。 考虑点数n为奇数的情况,每次Alice都选某个叶子的父亲,而Bob则被迫选那个叶子节点。此时无论Bob用不用vip技能,都没用。 考虑n为偶数的情况,Alice每次选某个叶子的父亲,那么Alice一定会输,所以Alice一定要选某个叶子节点,来让Bob染3个点,来达原创 2017-08-12 20:50:42 · 312 阅读 · 0 评论