比較基礎的搜尋剪枝題。。。。。
幾個優化就可以過了
用lowbit代替查詢可以填的數
用並集來維護什麼數不能填
優先考慮 最小可能性的位置(講道理我用堆維護還t了。。。。)
然後就可以在
$$ω(m)(n是數獨大小,m是可以填的種類數量)解決
實際測試中,遠遠不到這個上界
$$
#include
using
namespace std;
int a[15]
[15],tot=
0,sum=0;
bool judge=
false
;int q1[15]
,q2[15]
,q3[15]
,ans=(-
1),cnt[
100052];
int score[10]
[10]=
,,,,
,,,,
};intzhuan
(int x,
int y)
intlowbit
(int qqp)
int two[
10002];
void
getone
(int x,
int y,
int k)
void
init()
for(
int i=
0;i<
9;i++
) sum+
=a[i]
[j]*score[i]
[j];
int dx = a[i]
[j]-1;
if(q1[i]&(
1<)q1[i]-=
(1<(q2[j]&(
1<)q2[j]-=
(1<(q3[
zhuan
(i,j)]&
(1<)q3[
zhuan
(i,j)]-
=(1<}for
(int i=
0;i<(1
<<9)
-1;i++)}
}int
solve
(int rest,
int cal)
int minl=
15,xa,ya;
for(
int i=
0;i<
9;i++)}
}int now =
(q1[xa]
&q2[ya]
&q3[
zhuan
(xa,ya)])
;while
(now)
}int
main()
Luogu P1074 靶形數獨
include using namespace std struct consult row 0 struct consult row 0 dic row 0 10 查詢第幾行有幾個0 int origin 10 10 輸入的數獨 bool row 10 10 column 10 10 box 10...
luogu P1074 靶形數獨
小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 99 格寬 99 格高的大九宮格中有 99...
luoguP1074 靶形數獨(搜尋)
傳送門 75分,太菜,不會優化了,吐了。幾點優化。1.先搜尋容易確定的位置 2.從中心往周圍搜 3.列舉數字的時候倒序列舉 4.如果沒有列舉到的數字都是最優情況的話也不能比當前ans大就剪枝 5.位運算 include include include define max x,y x y x y d...