題解 引水入城

2021-08-27 16:14:31 字數 1548 閱讀 4112

@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列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠的功...