傳送門
解題思路
拉了很長的戰線,換了好幾種寫法終於過了。。首先每個蓄水場一定是對沙漠造成連續一段的貢獻,所以可以$bfs$出每種狀態,然後做一次最小區間覆蓋,但這樣的複雜度有點高。就每次只搜那些比左右高的點。
#include#includeview code#include
#include
#include
#include
using
namespace
std;
const
int maxn = 505
;const
int inf = 0x3f3f3f3f
;inline
intrd()
while(isdigit(ch))
return f?x:-x;
}int xx[4]=,yy[4]=;
intn,m,cnt,h[maxn][maxn],ans,num,t;
int vis[maxn][maxn];bool
b[maxn];
queue
q[3
];struct
data
}data[maxn];
void bfs(int x,int
y)
for(register int k=0;k<=3;k++)
q[1].push(ii);q[2
].push(jj);}}
//if(data[cnt].l==inf) cnt--;
//cout
intmain()
sort(data+1,data+1+cnt);int now=0;data[cnt+1].l=inf;
for(int i=1;i<=cnt;i++)
now=mx;num++;i=p-1
; }
puts("1
"),printf("%d"
,num);
return0;
}
LuoguP1514引水入城(搜尋 dp)
題目如上 非常非常巧妙的一道題目 1.先思考,要求的是什麼?如題目所說,目的是要把第n排全部建上那個什麼水利工程,全建上,也就是全部覆蓋!再考慮起點,也就是河岸,動動筆,也不難發現,某些節點可以拓展到終點的一片區域,如樣例一中9可以拓展到的點如圖所示,綠色的框則表示9,也就是入口第一列的這個點所能到...
P1514 引水入城
先用dfs搜尋,從最上面的一行往下拓展,所有點拓展完後,掃瞄最後一行是否有沒被染上色的,有則說明 不能滿足要求 如果沒有,在用dfs,計算出最上面一行的每個點 大於等於兩邊的點 能拓展到的最左端和最右端,然後就轉化成了區間覆蓋問題。區間覆蓋問題是給你幾個區間,然後給你乙個大區間,用盡量少的小區間來覆...
luogu1514 引水入城
題目描述 在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水...