luogu P1074 靶形數獨

2021-10-03 09:17:57 字數 1388 閱讀 3521

比較基礎的搜尋剪枝題。。。。。

幾個優化就可以過了

用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...