(巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846
?
鏈接:
http://acm.hdu.edu.cn/showproblem.php?pid=1846
?
首先來玩?zhèn)€游戲,引用杭電課件上的:
(1)?玩家:2人;
(2)?道具:23張撲克牌;
(3)?規(guī)則:
游戲雙方輪流取牌;
每人每次僅限于取1張、2張或3張牌;
撲克牌取光,則游戲結(jié)束;
最后取牌的一方為勝者。
??????想一下。。
??????首先申明一點(diǎn),博弈的討論是在大家都玩的最好的情況下討論的。(如果2個(gè)玩家智商有差別,那就沒法討論了~~~~開個(gè)玩笑哈。)
??????介紹概念:P點(diǎn)?即必?cái)↑c(diǎn),某玩家位于此點(diǎn),只要對(duì)方無失誤,則必?cái)?#xff1b;
????????????????????????N點(diǎn)?即必勝點(diǎn),某玩家位于此點(diǎn),只要自己無失誤,則必勝。
定理:
?????一、?所有終結(jié)點(diǎn)都是必?cái)↑c(diǎn)P(上游戲中,輪到誰拿牌,還剩0張牌的時(shí)候,此人就輸了,因?yàn)闊o牌可取);
????二、所有一步能走到必?cái)↑c(diǎn)P的就是N點(diǎn);
????三、通過一步操作只能到N點(diǎn)的就是P點(diǎn);
????自己畫下圖看看。
????x?:0??1??2??3??4??5??6??7??8??9??10。。。
pos:P???N?N??N??P?N??N??N??P?N???N?。。。
????所以若玩家甲位于N點(diǎn)。只要每次把P點(diǎn)讓給對(duì)方,則甲必勝;
???反之,若玩家甲位于P點(diǎn),他每次只能走到N點(diǎn),而只要乙每次把P點(diǎn)讓給甲,甲必?cái)?#xff1b;
????這里好好理解下;
???如果上面的理解的。請(qǐng)解決下面的題目:HDU?1846???2147(注意題目限制內(nèi)存)(先2道練練手,做不出的話提示:找規(guī)律)
????
?
代碼:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue>using namespace std;#define N 1100int main() {int t;scanf("%d", &t);while(t--){int n, m;scanf("%d%d", &n, &m);if(n%(m+1)==0) printf("second\n");else printf("first\n");}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/YY56/p/4777249.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的(巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1611 The Suspec
- 下一篇: 关于最小化的另辟蹊径