time limit: 10 sec memory limit: 259 mb
submit: 518 solved: 298
[submit][status][discuss]
lanzerb的部落在a國的上部,他們不滿天寒地凍的環境,於是準備向a國的下部征戰來獲得更大的領土。 a國是乙個m*n的矩陣,其中某些地方是城鎮,某些地方是高山深澗無人居住。lanzerb把自己的部落分成若干支軍隊,他們約定: 1. 每支軍隊可以從任意乙個城鎮出發,並只能從上往向下征戰,不能回頭。途中只能經過城鎮,不能經過高山深澗。 2. 如果某個城鎮被某支軍隊到過,則其他軍隊不能再去那個城鎮了。 3. 每支軍隊都可以在任意乙個城鎮停止征戰。 4. 所有軍隊都很奇怪,他們走的方法有點像西洋棋中的馬。不過馬每次只能走1*2的路線,而他們只能走r*c的路線。 lanzerb的野心使得他的目標是統一全國,但是兵力的限制使得他們在配備人手時力不從心。假設他們每支軍隊都能順利占領這支軍隊經過的所有城鎮,請你幫lanzerb算算至少要多少支軍隊才能完成統一全國的大業。
第一行包含4個整數m、n、r、c,意義見問題描述。接下來m行每行乙個長度為n的字串。如果某個字元是'.',表示這個地方是城鎮;如果這個字元時'x',表示這個地方是高山深澗。
輸出乙個整數,表示最少的軍隊個數。
【樣例輸入一】
3 3 1 2
....x.
...
【樣例輸入二】
5 4 1 1
....
..x.
...x
....
x...
【樣例輸出一】
4【樣例輸出二】
5【樣例說明】
【資料範圍】
100%的資料中,1<=m,n<=50,1<=r,c<=10。
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;vectore[5001];
int n,m,r,c,mp[51][51],lnk[5001],mark[5001];
char s[51][51];
bool dfs(int x)
if(i+c=0&&mp[i+c][j-r])}}
}int ans=0;
for(int i=1;i<=cnt;i++)
printf("%d\n",cnt-ans);
return 0;
}
POJ 3020(最小路徑覆蓋 拆點)
題意 乙個矩形中,有n個城市 現在這n個城市都要覆蓋無線,若放置乙個基站,那麼它至多可以覆蓋相鄰的兩個城市。問至少放置多少個基站才能使得所有的城市都覆蓋無線?思路 每個城市才是要構造的二分圖的頂點,先把每個 用數字1 n標記起來,然後構造無向二分圖,無向二分圖的構造需要拆點,即12之間的雙向邊要拆成...
最小路徑覆蓋問題(最小路徑覆蓋)
本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...
最小路徑覆蓋
zoj 2521 led display 題意 七段數碼顯示器,乙個數碼上的7段燈可以選擇滅掉一些後重複使用這個數碼,但滅掉的段不能再亮了。比如 6 可以 滅掉左小角的一段變成 5 來使用。但自己不能重複使用,即最少滅一段才能再次使用。現在按次序給出 乙個要現實的數碼序列,求需要的最少的燈數,使得能...