6 13校內互測 DP 帶權二分 斜率優化

2022-04-02 17:04:05 字數 2211 閱讀 5293

丘中有麻plant

改自這兒,by zbq。

還有隱藏的一頁不放了。。

直接走下去的話,如果開始時間確定那麼到每個點的時間確定,把time減去dis就可以去掉路程的影響了。

這樣對於減去d後的t,如果想要摘一部分,那麼應是取其中最大的t恰好摘它,其它t較小的會早熟然後等著。。(意會一下吧)

所以t大的會對t小的產生貢獻,而要恰好摘t小的,那就摘不了t大的了。

所以對t排序並不會影響答案。從小到大依次分k段就行了。i對其中每個作物j的貢獻是ti-tj。

注意t相等時雖然會同時摘,但是不能直接去重!因為如果不恰好摘它們,其它的會對它們所有產生貢獻。。

所以考試的時候只有10分。。

某些剪枝之類的優化還是想好再加吧。沒啥用又不會被卡t,不如不加。

#include #include #include #include //#define gc() getchar()

#define maxin 200000

#define gc() (ss==tt&&(tt=(ss=in)+fread(in,1,maxin,stdin),ss==tt)?eof:*ss++)

typedef long long ll;

const int n=2e5+5;

int n,k,q[n],num[n];//longlong

ll tm[n],sum[n],f[n],c;

char in[maxin],*ss=in,*tt=in;

inline int read()

namespace spec

inline ll x(int j,int k)

inline ll calc(int fr,int to,int k)

void main()

c=l, solve();

// c=r+1, solve();

printf("%i64d\n",f[n]-c*k);

return 0;

}

這是\(o(n^2k)\)暴力和\(o(nk)\)斜率優化,還有個改double的帶權二分(開始拍出錯tm爆int了),都去重了所以對拍雖然過了然而。。

就這題會所以特別不嫌麻煩。

暴力:

#include #include #include #include #define gc() getchar()

//#define int long long

typedef long long ll;

const int n=1e4+5;

int n,k,tm[n];

ll sum[n],f[n][250];

inline int read()

inline ll calc(int fr,int to,int k)

int main()

inline ll y(int j,int k)

inline ll x(int j,int k)

inline ll calc(int fr,int to,int k)

int main()

inline double y(int j,int k)

inline double x(int j,int k)

inline double calc(int fr,int to)

void solve()

c=l, solve();

// c=r+1, solve();

printf("%i64d\n",(ll)(f[n]-c*k+0.5));

return 0;

}

DP凸優化 帶權二分

對於如要求選m mm個東西的最優化問題,f i f i f i 表示選了i ii個東西的答案,則dp的時間和空間複雜度必然都與m mm線性相關。但如果f i f i f i 關於i ii是乙個斜率單調不增的函式 凸函式 則可以使用dp凸優化將複雜度降為與log m log m logm 線性相關。考...

對測 離線DP 二分

本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 market market.c cpp pas input fifile market.in output fifile market.out time limit 1 seconds memory limit 128 megabytes...

帶權二分 記錄一些帶權二分的一些題目

rt 帶權二分主要是處理問題如在物品中選擇k個,或者分k組,這些問題都有乙個共性就是選得越多越好 滿足單調性質 對於平常的處理方法我們都是利用dp處理,將選擇多少個作為一維度,但是在有些情況下,時空複雜度是容不下的。由於其具有單調性,那麼我們可以利用決策單調性 或者斜率優化 或者用同樣利用到單調性的...