noip2009 靶形數獨(搜尋 二進位制優化)

2021-08-08 22:52:46 字數 1021 閱讀 8611

給出一張9*9的未填滿的數獨,以及每個網格的權值val。求max,a[i][j]表示一張合法數獨第i行j列上所填數字。

數獨中非0數的個數不少於24

搜尋+二進位制優化

按照一般填數獨的策略,每次選擇能夠填的數最少的格仔填。使用二進位制表示行h,列l,塊x上能夠填的數,第i行j列處於k塊的格仔能填的數的二進位制表示即為h[i]&l[j]&x[loc[i][j]]。

預處理出十進位制2^p的p用於列舉可填的顏色。預處理1<<9種情況分別能夠填的數的數量cnt,cnt[i] = cnt[i - lowbit(i)] + 1。

lowbit(i)取i的二進位制表示最右端的1所表示的十進位制數。

#include

#include

#include

#define lowbit(x) (x&(-x))

const

int loc[9][9] = ,,,

,,,,

,};

const

int val[9][9] = ,,,

,,,,

,};

int ans = -1;

int yes[10];

int h[10],l[10],x[10];

int rep[1

<<9],cnt[1

<<9];

int init()

for(int i = 1; i < (1

<<9); ++i)

cnt[i] = cnt[i-lowbit(i)] + 1;

int val, ret = 0, t;

for(int i = 0; i < 9; ++i)

for(int j = 0; j < 9; ++j)

else yes[i] |= (1

}void dfs(int sum) }}

if(mn == 10)

yes[x] ^= 1

yes[x] ^= 1

NOIP2009 靶形數獨 搜尋

sudoku.pas c cpp 問題描述 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向z博士請教,z博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在9格...

noip2009 靶形數獨 (搜尋)

1755靶形數獨 accepted 標籤 搜尋 noip提高組2009 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形...

NOIP2009 靶形數獨(搜尋)

小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有 9 個 ...