hdu 1045 貪心求解

2021-08-21 06:21:54 字數 951 閱讀 8141

有乙個n行n列的地圖,其中 '.' 代表空地,可以建造炮台,'x' 代表牆,建造規則是:每兩個炮台之間必須有一堵牆,否者這兩個炮台就會互相摧毀。現在輸入一張這樣的地圖,要你計算最多可以建造多少炮台?

根據地圖,得到一張新的數字地圖,這張數字地圖的構建方法是:

大小和原地圖一樣,

計算原地圖的每乙個 ' . ' 所在行列中有多少個 『 . 』,並將新圖對應位置賦為該值。計算方法是:在每一行或每一列中走到底,或者遇到 ' x ' 結束。(可以包括本身也可以不包括本身,這裡用不包括本身的方法)。

將原圖中所有的 ' x ' 所在位置賦值為 無窮大(乙個達不到的數即可,這裡可以為 8 ,因為,最大為4行4列,這裡計算又不包括本身,所以乙個點所在的行列所有格仔加起來最大也就是  6)。

按照這個方法可以得到乙個新的地圖:

在新圖中貪心求解:(數字越小,證明在該點建造炮台影響到的點越少,可以建造的炮台也就越多)

找出第一排最小的數,判斷是否小於 8  否 :  則下一行 。 是  :計數,然後將該點自己及其所影響到的不能再建造炮台的點賦值為無窮大。再找出最小的數,重複上述步驟,直到這一行沒有小於8的數。

#include#include#includeint main ()

} printf("%d\n",sum);

sum=0;

} return 0;

} /* for(i=0;i

printf("\n");

}*/

HDU 1045 回溯演算法

firenet,此題也應該算是一道經典題。此題資料範圍小,不需要剪枝 其實我不知道怎麼剪枝,貌似沒什麼可剪的。hdu 1045 mike w 2012 4 8 include include include define max size 10 define ndisp map char map m...

hdu1045 炮台的配置 dfs

只要炮台在同一行或者同一列,就可以互相摧毀,遇到牆則無法對牆後的炮台造成傷害,可以通過dfs搜尋n n的方格,全部搜完算一輪,計算炮台數,並儲存其最大值。其中對於t編號的炮台,位置可以計算出是 t n,t n 其次,只要看是否與前面的擺放是否衝突。include include include us...

hdu1045 二分匹配

這題我是在總結過程中想找二分匹配做做的,如果是平時我估計就直接深搜了。二分匹配一開始沒想出來如何建圖,開始的思路有點阻塞,後來突然就明白了。題意,給乙個n n的棋盤 圖中有x和。其中x代表牆,問棋盤中最多能放多少個 車 使每個車都安全。先對行搜尋,一行中若隔乙個x則相當於有2行,找出所有的行並標上序...