灌溉草場POJ2373

2021-09-25 03:32:28 字數 1302 閱讀 3078

灌溉草場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,...