洛谷4983 忘情(WQS二分)(斜率優化)

2021-08-31 00:27:48 字數 893 閱讀 7225

洛谷4983 忘情

wqs二分+斜率優化

公式簡化看這

其他就很套路了,只要在f轉移時加上乙個mid。我用c來記錄選了多少個(x座標),所以最後判斷c[n]與m的大小關係,如果c[n]小了,則要選多一點,即mid要小一些。

據說還可以用四邊形不等式來做,%%%

#include#include#include#define sqr(x) (x)*(x)

using namespace std;

typedef long long ll;

const int maxn=100010;

const int maxsize=1<<16;

char buf[maxsize],*p1=buf,*p2=buf;

#define gc p1==p2 && (p2=(p1=buf)+fread(buf,1,maxsize,stdin),p1==p2)?eof:*p1++//debug p1==p1 

//#define gc getchar()

inline int read()

int n,m;

ll s[maxn];

ll f[maxn];int c[maxn];

inline double x(int k)

inline double y(int k)

inline double slope(int i,int j)

int head,tail,q[maxn];

int check(ll mid)//debug bool check

return c[n];

}int main()

printf("%lld\n",ans);

return 0;

}

WQS二分 學習筆記

我的理解 不一定很對 大概就是某個東西越多總貢獻越大,要求剛好取n個時的最優解。可以把 dp 狀態裡記的取的個數這一維去掉,而設乙個 co st,取 k 個物品,總貢獻要多減去cost k,然後 dp cos t 越大,物品數取越少。二分 co st使得 dp 得到的答案剛好取了 n 個物品。設 g...

WQS二分學習筆記

wqs 二分聽起來是個很難的演算法,其實學起來也並不是那麼難。在某些題目中,會對於某個取得越多越優的物品,限定你最多選擇 k 個,問你能得到的最優答案。例如這道題目 cf739e gosha is hunting。這些題目一般都可以通過列舉選擇的物品個數並 o n dp 來做到 o nk 但如果隨著...

總結 wqs二分學習筆記

在某些題目中,強制規定只能選 k 個物品,選多少個和怎麼選都會影響收益,問最優答案。對於上述描述的題目,大部分都可以通過列舉選擇物品的個數做到 o nk 2 或 o nk 的 mathrm 如果沒有選擇個數的限制的話,複雜度大概會降為 o n 級別。先不考慮數量限制。假設要最小化權值。還是拿題說吧 ...