灌溉草場poj2373
偽**&&思路:
具體分析根據老師動歸課件,這裡給出ac原始碼用f(
x)表示到x時最小水管數。if(
isodd
(x))
f(x)
=inf
if(x<
2a)f
(x)=
infif
(inarea
(x))
f(x)
=inf
if(x>
2a&&x<=
2b&&
!inarea
(x))
f(x)=1
if(x>
2b)f
(x)=
min(
f(y)
),y is in x-
2b to x-
2a.
原碼:
//使用到優先佇列
#include
#include
#define inf 1500000
using namespace std;
bool area[
1000010];
//草場陣列,在牛區的是1,不在的是0
int f[
1000010];
//遞推陣列
int n, l;
int a, b;
intisodd
(int i)
intinarea
(int i)
//優先佇列的定義
int q[
1000010];
int fron, rea;
void
qpush
(int i)
void
work()
else
if(x <
2* a) f[x]
= inf;
//是否小於最小半徑
else
if(x >=
2* a&&x <=
2* b) f[x]=1
;//最小的f[x]發祥地}}
intmain()
work()
;if(f[l]
>= inf)
cout <<-1
;else cout << f[l]
;system
("pause");
return0;
}
POJ2373動態規劃
單調佇列優化的dp。首先我們先進行預處理,將可以合併的區間合併到一起,這個可以在o nlogn 的時間內完成。方法是按照x排序,然後找相鄰的兩個區間 a,b 和 c,d 是否滿足ac,注意這裡必須嚴格大於才行,因為這裡的區間都是開區間,如果存在b c這樣的情況,那麼b這個點就可以分割。然後進行動態規...
POJ2373 單調佇列優化DP
這道題調了我一天.呃.開始很多地方沒注意.傳說中樓教主的男人八題搞定一道.這道題是一道典型的dp題.但直接做時死超的.所以要用單調佇列來優化.關於最基礎的單調佇列.我前一篇文章已經說了.所以直接分析本題.題意是說有乙個直線的山脊.噴泉是乙個在中間向兩邊同時噴的.最近噴a.最遠b.同時山脊上有牛.每只...
POJ 2373 單調佇列優化DP
題意 思路 f i min f j 1 2 i j 2 i表示當前在第i個點。f i 表示當前最少的線段個數 先是n 2的樸素dp 果斷tle by siriusren include include include using namespace std int n,l,a,b,tot 1,xx,...