@luogu
@loj
從上向下記憶化搜尋,儲存每個點能覆蓋的最底層的區間。如果乙個點能到達的區間不連續,那麼一定沒有方案。然後做乙個基礎貪心:從n個區間中選出盡量少的區間,覆蓋1-n
#include
#include
#include
#define n 510
#define ll long long
#define max(x,y) ((x)>(y) ? (x) : (y))
#define min(x,y) ((x)<(y) ? (x) : (y))
using
namespace std;
inline
intgetint()
return t*p;
}struct line
bool
operator
<
(const line &o)
const
} b[n]
[n],c[n]
;const
int dx[4]
=;const
int dy[4]
=;int a[n]
[n],n,m;
bool flag,f[n]
[n];
void
iscream
(int x,
int y)
for(
int i=
0;i<
4;i++
)else
b[x]
[y].l=
min(b[x]
[y].l,b[nx]
[ny]
.l);
b[x]
[y].r=
max(b[x]
[y].r,b[nx]
[ny]
.r);}}
}}intmain()
} flag=
false
;memset
(f,false
,sizeof f)
;for
(int i=
1;i<=m;i++)if
(flag)
printf
("0\n%d\n"
,ans)
;return0;
}int l=1;
sort
(c+1
,c+m+1)
;int ans=0;
int j;
for(
int i=
1;i<=m;i=j)
if(mx>=l) l=mx+1;
if(l>m)
break;}
if(l<=m)
printf
("0\n%d\n"
,ans)
;return0;
}printf
("1\n%d\n"
, ans)
;return0;
}
貪心 DFS 引水入城
我覺得這道題放在貪心裡應該不為過 原文 題目測評 自行放大。題解 最開始的思路是全排列 搜尋,預估30分。正解是搜尋 dp,先對每個 靠近河岸的點搜一次,儲存下來這個點能夠覆蓋的區間,也就是能到達 的靠近沙漠的點,然後對於這些區間進行dp,找出覆蓋所有區間用的 最少的點。另外用乙個陣列儲存所有蓄水站...
引水入城 noip2010
題目描述 description 在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政 區劃十分特殊,剛好構成乙個n行m列的矩形,如上圖所示,其中每個格仔都代表一座城 市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施 ...
引水入城 NOI2010
在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n行m列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠的功...