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