toj 4061 矩陣攻擊 最大獨立集

2022-08-05 10:00:25 字數 1261 閱讀 9220

題目:

給定乙個01 矩陣,其中你可以在0的位置放置攻擊裝置。每乙個攻擊裝置 (x,y) 都可以按照「日」字攻擊其周圍八個位置(x−1,y−2),(x−2,y−1),(x+1,y−2),(x+2,y−1),(x−1,y+2), (x−2,y+1),(x+1,y+2),(x+2,y+1)。

求在裝置不相互攻擊的情況下,最多可以放置多少個裝置。

第一行乙個整數 n,表示矩陣大小為 n*n。接下來 n 行是乙個長度為n的01 串,表示矩陣。(n <= 200)

乙個整數,表示在裝置不相互攻擊的情況下最多可以放置多少個裝置。

3

010

000

100

4

分析:通過畫圖來分析,假設在左上角放置攻擊裝置,忽略障礙,標記出可以其他可以放置跟不可以放置裝置的位置,會發現他們是交替出現的;如果把x和y座標和為奇數的位置歸為一類,為偶數的歸為一類,則在同類位置間任意放置裝置時不會相互攻擊,在兩類位置分別放置攻擊裝置時,可能相互攻擊。至此,此題二分圖的特徵已經相當明顯了,是個求解最大獨立集的問題。

**如下(通過此題發現vector存圖好慢,跟手寫的結構體相比,差了不止一點,以後還是盡量少用vector存圖):

#include #include 

using

namespace

std;

#define n 205

//發現用vector 存圖好慢呀

struct

edgeedge[n*n*8

];int

ecnt;

int head[n*n];

char

mp[n][n];

intid[n][n];

intn;

int go[4][2] = , , , };

int link[n*n];

bool visited[n*n];

void add(int u, int

v)bool find(int

u) }

return

false;}

intsolve()

return

res;

}int

main()}}

}printf(

"%d\n

", n*n-cnt-solve());

}return0;

}

TOJ 1188 田忌賽馬 貪心)

題意 田忌和齊王賽馬,勝一場可得200金,負一場損失200金,平局無得失。給出馬的數量和田忌每匹馬的速度,齊王每匹馬的速度,求出田忌最多可以贏得多少金。最大最小解問題,貪心 思路 按照速度對田忌和齊王的馬進行降序排序,如果當前田忌馬的最高速度大於齊王馬,贏 田忌馬最高速度小於齊王馬,用田忌最低馬速度...

toj1746 備份 未AC 跪了

讓我匪夷所思 想了二十多分鐘後只想到了dp,所以果斷開寫,嗯,開個陣列dp max max 預處理 我了個擦,不曾想資料一大就掛了 然後回頭改了long long,交了還是 wa掉,這時我開始懷疑自己的思路了 然後醞釀了檢測發現到了 以後long long 也爆了!我靠,尼瑪還要寫大整數,開始想用 ...

TOJ4701 求陰影部分面積

能不能不爬我部落格啊,mmp 設正方形abcd邊長為a,分別以b和d為圓心,繪製半徑為a的1 4圓,與正方形的內切圓相交與m n o p點,求這些交點圍成的陰影部分面積。input 輸入資料有多組,每組輸入乙個正整數a a 20 表示正方形的邊長,輸入以eof結束。output 每組輸出乙個小數,表...