POJ 2373 單調佇列優化DP

2021-07-23 03:40:31 字數 1114 閱讀 5341

題意:

思路:

f[i] = min(f[j]) + 1; 2 * a <= i - j <= 2 *b;

i表示當前在第i個點。f[i]表示當前最少的線段個數

先是n^2的樸素dp(果斷tle)

//by siriusren

#include

#include

#include

using

namespace

std;

int n,l,a,b,tot=1,xx,yy,f[1000050];

struct nodenode[1050];

bool cmp(node a,node b)

sort(node+1,node+1+n,cmp);

for(int i=1;i<=l;i++)

}printf("%d\n",f[l]);

}

下面我們開始想優化…

a和b都是常數,,他要找乙個最大值。。

1.線段樹優化 (卡時過)

2.單調佇列優化

注意插入的時候要等到算f[i+2*a]的時候再把f[i]插到佇列裡。

(用stl的雙端佇列寫得)

//by siriusren

#include

#include

#include

#include

using

namespace

std;

int n,l,a,b,tot=1,xx,yy,f[1000050];

struct nodenode[1050],jy;

bool cmp(node a,node b)

if(f[l]<0x3ffffff)printf("%d\n",f[l]);

else

puts("-1");

}

POJ2373 單調佇列優化DP

這道題調了我一天.呃.開始很多地方沒注意.傳說中樓教主的男人八題搞定一道.這道題是一道典型的dp題.但直接做時死超的.所以要用單調佇列來優化.關於最基礎的單調佇列.我前一篇文章已經說了.所以直接分析本題.題意是說有乙個直線的山脊.噴泉是乙個在中間向兩邊同時噴的.最近噴a.最遠b.同時山脊上有牛.每只...

POJ 2373 單調佇列優化dp

題目大意 有一塊長度為l的草原,你需要用灑水器把所有草坪都覆蓋並且每塊草坪只能被覆蓋一次,有n個奶牛所在的草坪屬於 l,r 這些區間只能有乙個灑水器 題目解析 定義dp i 為在第i塊草坪結束的時候所蘇姚最少的灑水器,dp i min dp j 1 i 2b j i 2a,還有乙個問題就是n個奶牛的...

poj2373(單調佇列優化dp)

傳送門 題意是每個灑水裝置的半徑範圍為 a,b 每頭奶牛有自己的乙個區間 s,e 這個區間只能由乙個灑水裝置覆蓋。要求整個區間 1,l l 1e6 不重疊的被覆蓋,最少要多少個灑水裝置,灑水裝置的範圍不可以超過整體區間的範圍。因為乙個區間 s,e 只能由乙個灑水裝置覆蓋,所以 s 1,e 1 都不可...