給出一張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 個 ...