洛谷P1514 引水入城 dfs

2022-05-12 11:48:10 字數 963 閱讀 3940

題目:

搜尋+dp;

自己想出來的方法第一次80分好高興!

再改了改就a了,狂喜亂舞;

也就是 dfs,仔細一想第一行的每個點能覆蓋到最後一行的點一定是連續的一段,否則沒人能覆蓋中間間斷的點;

所以最上面每個點跑一遍 dfs,記下能覆蓋區間的 l 和 r,再小小dp一下即可。

**如下:

#include#include

#include

#include

using

namespace

std;

intconst maxn=505

;int n,m,h[maxn][maxn],f[maxn],cnt,tot,l,r,dx[5]=,dy[5]=;

bool

vis[maxn][maxn],vs[maxn];

struct na[maxn],b[maxn];

bool cmp(n x,n y)

void dfs(int x,inty)}

intmain()

int ans=0

;

for(int i=1;i<=m;i++)

if(!vs[i])ans++;

if(ans)

sort(a+1,a+cnt+1

,cmp);

for(int i=1;i<=cnt;i++)

memset(f,

0x3f,sizeof

f); f[

0]=0

;

for(int i=1;i<=tot;i++)

for(int j=b[i].l-1;j)

f[b[i].r]=min(f[b[i].r],f[j]+1

); printf(

"%d\n%d

",1,f[m]);

return0;

}

洛谷 P1514 引水入城(DFS)

注意這道題只能用dfs而不能直接用dp,因為在每乙個格仔,沒有固定的方向,而是上下左右都可以走。但其中有dp的思想 不斷更新l和r。這道題中首先判斷乾旱區所有的城市能否都能建有水利工程。則先讓第一行的每乙個城市都有水利工程,然後進行遍歷,看最後一行的所有點能不能都被走到,如果有走不到的,則說明不行,...

洛谷 P1514 引水入城

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

洛谷 P1514 引水入城

題目概述 給定乙個n m的矩陣,每個格仔代表高度,水只能向低處流。從最上面一排倒水,問最下面一排的每個格仔是否都有水流過。若是,輸出最少需在幾個格仔上倒水,若否,則輸出最下面一排有幾個格仔接不到水。解題思路 可以證明,如果底排每個格仔都有水,那麼從頂部每個格仔倒下的水,在底部形成的一定是乙個連續的區...