P1514 引水入城

2021-08-05 19:19:46 字數 1064 閱讀 4505

先用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 引水入城

在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠...

P1514 引水入城

在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠...

P1514 引水入城

在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠...