題意:
思路:
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 都不可...