寬搜+貪心
還是挺容易的
對第一行的每乙個點進行搜尋,統計最後一行每個點的到達情況
然後記錄下該點可到達的最左端和最右端的位置
判斷最後一行的到達情況,統計不可到達的點,如果不為
0 就輸出,退出程式
否則就是做最少線段覆蓋問題
可以證明第一行的每乙個點可到達最後一行的位置是連續的(我證不來)
問題就變成了完全覆蓋1到
m 最少要幾條線段
把線段以頭為主要關鍵字從小到大,尾為次要關鍵字從大到小排序
設當前線段可覆蓋1到
x ,我們要找的下一條線段是頭在1到
x 中,尾最大的線段,直到全部覆蓋為止 vi
jos上
1a了,然而落谷上
t 了乙個點,所以加個優化,當第一行某個點不低於左右倆個點時才搜尋
#include
#include
#include
#include
#define g getchar()
#define ll long long
#define inf 0x3f3f3f3f
using
namespace
std;
inline ll read()
inline
void out(ll x)
struct res[505],dui[505*505];
int n,m,a[505][505],tou,wei,ans,now,nx;
bool mp[505][505],pd[505];
int ox[5]=,oy[5]=;
inline
bool cmp(re x,re y);
memset(mp,0,sizeof(mp));mp[1][i]=1;
for(;tou<=wei;++tou);}}
for(int j=1;j<=m;++j)
}for(int i=1;i<=m;++i)ans+=pd[i];
if(ans0),out(m-ans);return
0;} sort(s+1,s+1+m,cmp);
now=1;nx=0;ans=0;
for(;now<=m;)
out(1),out(ans);
return
0;}
NOIP2010 引水入城
兩遍bfs floodfill,第一遍bfs可以判斷出最後是輸出0還是輸出1,第二遍bfs floodfill不懂 program flow const dx array 1.4 of 1.1 1,0,1,0 dy array 1.4 of 1.1 0,1,0,1 type atp record x...
NOIP2010 引水入城
4引水入城在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水...
NOIP 2010 引水入城
題目描述 在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政 區劃十分特殊,剛好構成乙個n行m列的矩形,如上圖所示,其中每個格仔都代表一座城 市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施 有兩種,分別為蓄水廠和輸...