n hdu 1760 SG博弈 二維狀態

2022-09-08 16:33:19 字數 1672 閱讀 3739

題意:出處

題意:給你乙個n*m的矩形,0表示空著的,1反之,現在兩個人輪流放2*2的矩形,誰不能放了,誰就輸了。

找sg值,可以選擇暴力,也可以利用sg值的特點簡化。

暴力就跟取石子一樣,沒什麼差別,dfs搞定。把矩陣看成乙個字串,字串就是乙個狀態。

其實我們也可以不暴力求sg值,因為只要當前狀態能到達乙個sg值為0的點,當前狀態就是必勝點。

若當前點到達的所有狀態都是必勝的,那麼當前點就是必敗點。所以當我們到達必勝點時,就必須轉換當前狀態繼續遞迴找sg值。

法一、暴力找sg值:

表示還在理解中。。。。n

view code

//

i'm lanjiangzhou//c

#include #include

#include

#include

#include

#include

//c++

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

//*************************output*************************

#ifdef win32

#define int64 "%i64d"

#define uint64 "%i64u"

#else

#define int64 "%lld"

#define uint64 "%llu"

#endif

//**************************constant***********************

#define inf 0x3f3f3f3f

//aply for the memory of the stack

//#pragma comment (linker, "/stack:1024000000,1024000000")

//end

intn,m;

const

int maxn =110

;char

s[maxn][maxn];

inta[maxn][maxn];

intmm[maxn][maxn];

int findset(int

mm[maxn][maxn])

}tt[i][j]=tt[i+1][j]=tt[i][j+1]=tt[i+1][j+1]=1

;

if(findset(tt)==0) return1;}}

}return0;

}int

main()

if(findset(a)) printf("

yes\n");

else printf("

no\n");

}return0;

}

C 17 6 lambda擴充套件

自從c 17開始,如果lambda表示式符合要求的話,該表示式會隱式轉換為constexpr表示式。表示式內沒有靜態變數,沒有虛函式,沒有 try catch語句,沒有new delete關鍵字 如下 auto squared auto val 隱式轉換為constexpr表示式,即可以在編譯器求值...

NYOJ 176 整數劃分(二)

整數劃分 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述把乙個正整數m分成n個正整數的和,有多少種分法?例 把5分成3個正正數的和,有兩種分法 1 1 3 1 2 2 輸入第一行是乙個整數t表示共有t組測試資料 t 50 每組測試資料都是兩個正整數m,n,其中 1 n m...

DP NYOJ 176 整數劃分 二

整數劃分 二 dp 解決問題 把乙個正整數m分成n個正整數的和,有多少種分法?解決方法 dp i j 代表 m為i,並分成j個正整數的和時的分法。初始化 dp i 1 1。遞推式 dp i j dp i 1 j 1 有1的情況 dp i j j 沒有1的情況 include include incl...