洛谷 P1514 引水入城(DFS)

2022-04-06 17:37:59 字數 919 閱讀 2771

注意這道題只能用dfs而不能直接用dp,因為在每乙個格仔,沒有固定的方向,而是上下左右都可以走。但其中有dp的思想:不斷更新l和r。

這道題中首先判斷乾旱區所有的城市能否都能建有水利工程。則先讓第一行的每乙個城市都有水利工程,然後進行遍歷,看最後一行的所有點能不能都被走到,如果有走不到的,則說明不行,記錄走不到的個數,輸出即可。

如果都能走到,則需要考慮第一行選哪幾個使得能將最後一行全部覆蓋過來。那麼在剛才遍歷的時候,可以不斷更新l,r(詳見**),直到從l[n]和r[n]更新至l[1]和r[1]。現在l[1][i]和r[1][i]中分別存第一行第i個如果選的話,能灌溉最後一行[l,r]這個區間的城市。然後用線段覆蓋思想來做即可。(詳見while)

ac**:

1 #include2 #include3 #include4

using

namespace

std;

5const

int n=505;6

intn,m;

7int

vis[n][n],g[n][n],l[n][n],r[n][n];

8int _x[4]=;

9int _y[4]=;

10bool judge(int x,int

y)15

void dfs(int x,int

y)25}26

intmain()39}

40if

(flag)

44int low=1;45

while(low<=m)

50 ans++;

51 low=maxx+1;52

}53 printf("

1\n%d

",ans);

54return0;

55 }

ac**

洛谷P1514 引水入城 dfs

題目 搜尋 dp 自己想出來的方法第一次80分好高興!再改了改就a了,狂喜亂舞 也就是 dfs,仔細一想第一行的每個點能覆蓋到最後一行的點一定是連續的一段,否則沒人能覆蓋中間間斷的點 所以最上面每個點跑一遍 dfs,記下能覆蓋區間的 l 和 r,再小小dp一下即可。如下 include includ...

洛谷 P1514 引水入城

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

洛谷 P1514 引水入城

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