先用dfs搜尋,從最上面的一行往下拓展,所有點拓展完後,掃瞄最後一行是否有沒被染上色的,有則說明
不能滿足要求;
如果沒有,在用dfs,計算出最上面一行的每個點(大於等於兩邊的點)能拓展到的最左端和最右端,然後就轉化成了區間覆蓋問題。
區間覆蓋問題是給你幾個區間,然後給你乙個大區間,用盡量少的小區間來覆蓋大區間。
區間覆蓋問題的解法有兩種,我只會貪心做法:
我們把各個區間按照 l 公升序排序,然後每次找 l 小於等於當前 l 中 r 最大的。然後將l更新為找出的最大的r,
一直到l到達終點。
#include
#include
#include
#include
#include
using
namespace
std;
int n,m,a[509][509],color,cnt;
struct hst[509];
bool f[509][509];
int dx=,dy=;
int l,r;
bool cmp(h x,h y)
int flag=0;
for(int i=1;i<=4;i++)
}//if(!flag) return;
}int main()
int z=0;
for(int i=1;i<=m;i++)
if(!f[n][i]) z++;
if(z)
color=1;
for(int i=1;i<=m;i++)
if(a[1][i]>=a[1][i-1]&&a[1][i]>=a[1][i+1])
sort(st+1,st+cnt+1,cmp);
l=0;int ans=0;
while(lint maxn=0;
for(int i=1;i<=cnt;i++)
l=maxn;
ans++;
} printf("1\n%d",ans);
return
0;}
P1514 引水入城
先用dfs搜尋,從最上面的一行往下拓展,所有點拓展完後,掃瞄最後一行是否有沒被染上色的,有則說明 不能滿足要求 如果沒有,在用dfs,計算出最上面一行的每個點 大於等於兩邊的點 能拓展到的最左端和最右端,然後就轉化成了區間覆蓋問題。區間覆蓋問題是給你幾個區間,然後給你乙個大區間,用盡量少的小區間來覆...
P1514 引水入城
在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠...
P1514 引水入城
在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠...