HDU2147 巴什博弈

來源:互聯網
上載者:User

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2147

 

題目大意:就是有一個遊戲,在一個n*m的矩陣中起始位置是(1,m),走到終止位置(n,1);遊戲規則是只能向左,向下,左下方向走,想走到終點的為獲勝者。

 

這一題就是巴什博弈,自學的孩子苦啊,網上找的資料還是有些不懂,先存著:

 

只要把PN狀態圖描繪出來就行了:

P點:就是P個石子的時候,對方拿可以贏(自己輸的)

N點:就是N個石子的時候,自己拿可以贏

現在關於P,N的求解有三個規則

(1):最終態都是P

(2):按照遊戲規則,到達當前態的前態都是N的話,當前態是P

(3):按照遊戲規則,到達當前態的前態至少有一個P的話,當前態是N

 

/*

* 博弈論:組合博弈
* 必敗點(P點) :前一個選手(Previous player)將取勝的位置稱為必敗點。
* 必勝點(N點) :下一個選手(Next player)將取勝的位置稱為必勝點。

* 必敗(必勝)點的屬性:
* (1) 所有終結點是必敗點(P點);
* (2) 從任何必勝點(N點)操作,至少有一種方法可以進入必敗點(P點);
* (3)無論如何操作, 從必敗點(P點)都只能進入必勝點(N點).
* 由上面的屬性得到該題的演算法:
* 步驟1:將所有終結位置標記為必敗點(P點);
* 步驟2: 將所有一步操作能進入必敗點(P點)的位置標記為必勝點(N點)
* 步驟3:如果從某個點開始的所有一步操作都只能進入必勝點(N點) ,則將該點標記為必敗點(P點) ;
* 步驟4: 如果在步驟3未能找到新的必敗(P點),則演算法終止;否則,返回到步驟2。
* 由上面的演算法計算一個例子:
* 我們可以把問題轉換成從(1,1)走到(n,m) (方便等下得出結論)


* 但n=8,m=9的情況
NNNNNNNNN
PNPNPNPNP
NNNNNNNNN
PNPNPNPNP
NNNNNNNNN
PNPNPNPNP
NNNNNNNNN
PNPNPNPNP
*初始點(1,1)為N所以輸出Wonderful!
*從這裡例子就可以很清楚得看出當n和m都為奇數時,初始點(1,1)才會是P。
*因此該題只需判斷n,m是否同時為奇數即可。
*/

 

#include<iostream>using namespace std;int main(){int n,m;while(cin>>n>>m,m+n){puts((n%2&&m%2)?"What a pity!":"Wonderful!");}return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.