洛谷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 級別。先不考慮數量限制。假設要最小化權值。還是拿題說吧 ...