從wyh大佬那裡蹭來了乙份dlx的題解,然後進行了一番深刻的理解,最後自己手打了一遍,感覺受益頗多,最主要的是這個**融合了很多卡常技巧2333333333
和普通的dfs不同,這份**從根進行剪枝,每一層都取方案數最小的位置進行搜尋,因而得到十分顯著的優化,原來乙個點4s的題,現在20個點總共用時加起來也就3.7s
ps:其實應該把dl去了,因為這個地方只用到x演算法,並沒加十字鍊錶╮(╯▽╰)╭
#include#include#include
#define ri register int
using
namespace
std;
int mmp[10][10],s[10][10
],su,ans,tot;
bool h[10][10],l[10][10],ku[10][10],u[10][10
],flag;
inline
void re(int &a)
while(x>='
0'&&x<='9'
) a=a*10+x-'
0',x=getchar();
if(flag)
a*=-1;}
inline
void wr(int
a)inline
void
init()
}inline
int ask(int i,int
j)
else
if(i<=6
)
else
}void dfs(int he,int
ci)
int lx,ly,tail=100
,lin;
for(ri i=1;i<=9;i++)
for(ri j=1;j<=9;j++)
}for(ri i=1;i<=9;i++)
if(!h[lx][i]&&!l[ly][i]&&!ku[ask(lx,ly)][i])
}int
main()
}
ans=-1
; dfs(su,tot);
wr(ans);
}
codevs1174 靶形數獨
題目鏈結 題解 可以預處理出已經填數字比較密集的區域開始搜尋來減少後續決策數 include include include using namespace std const int n 9 int s,tot,ans int a 10 10 struct dataf 10 10 int fen ...
靶形數獨(codevs 1174)
2009年noip全國聯賽提高組 時間限制 4 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解檢視執行結果 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向z 博士請教,z 博士...
靶形數獨 (codevs 1174)題解
問題描述 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有9...