[BZOJ3701]N皇後
阿新 • • 發佈:2017-07-21
scan n) amp 所有 span .cn main clas png
3
哈哈哈水題~
但是不能一眼看出來的。。我想了一個小時?!
題面
Description
“國際象棋中,一方的皇後數不能超過5個” 一個N*N的棋盤,任意擺放皇後,最壞情況下最少需要多少個皇後才能保證所有的格子都被攻擊到。Input
多組數據 第一行一個整數,數據組數T 接下來T行,每行一個正整數NOutput
每組數據輸出一行一個整數表示答案。Sample Input
13
Sample Output
3HINT
100%的數據,N<=50,T<=25
真坑啊。。被數據範圍騙了。。差點寫了深搜。
然而事實是:
對於任意一個點A,這個地方放上皇後,A所能覆蓋的點放上皇後也能覆蓋A。
而A覆蓋不了的點放上皇後怎麽也覆蓋不了A。
所以最優的方案就是,先在這些覆蓋不了的點上全都放上皇後,最後就會只剩一個A沒有覆蓋,再怎麽放A都要被覆蓋了。
如下圖
對於任意的A,紅圈再加上隨便一個位置就是要放的地方。
可以證明這個A取四個角的時候不能覆蓋點最多。即答案最大。
所以答案就是n*n-n*3+3了。
代碼簡直智障。
1 #include<cstdio> 2 int main(){ 3 int t;scanf("%d",&t); 4 while(t--){ 5 int n;scanf("%d",&n); 6 printf("%d\n",n*(n-3)+3); 7 } 8 }
寫這個題解主要是網上沒有,怕這破題坑人啊哈
[BZOJ3701]N皇後