日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題


題目大意

nnn個人mmm輛車。
人有tit_iti?,車有fjf_jfj?。第i個人修第j倆車時間是ti?fjt_i*f_jti??fj?
一輛車要每個人都修一遍,且一個人修好后要求下一個人沒有工作。對于每輛車找一個修理開始時間要求總修理時間最小(得按順序修)。


解題思路

定義ti=∑i=1mtit_i=\sum_{i=1}^mt_iti?=i=1m?ti?
gig_igi?表示第iii輛車開始的時間,然后答案就是gm+fn?sig_m+f_n*s_igm?+fn??si?
且有gi=gi?1+max?{tk?fi?1?tk?1?fi}g_i=g_{i-1}+\max\{t_k*f_{i-1}-t_{k-1}*f_i\}gi?=gi?1?+max{tk??fi?1??tk?1??fi?}
時間復雜度O(nm)O(nm)O(nm)
愉快TLETLETLE,我們考慮斜率優化
對于決策j,kj,kj,k,且kkkjjj
那有tk?fi?1?tk?1?fi>tj?fi?1?tj?1?fit_k*f_{i-1}-t_{k-1}*f_i>t_j*f_{i-1}-t_{j-1}*f_itk??fi?1??tk?1??fi?>tj??fi?1??tj?1??fi?
?(tk?tj)?fi?1>(tk?1?tj?1)?fi\Rightarrow (t_k-t_j)*f_{i-1}>(t_{k-1}-t_{j-1})*f_i?(tk??tj?)?fi?1?>(tk?1??tj?1?)?fi?
?tk?tjtk?1?tj?1>fifi?1\Rightarrow \frac{t_k-t_j}{t_{k-1}-t_{j-1}}>\frac{f_i}{f_{i-1}}?tk?1??tj?1?tk??tj??>fi?1?fi??

然后我們發現fifi?1\frac{f_i}{f_{i-1}}fi?1?fi??并不是單調遞增的,但是tk?tjtk?1?tj?1\frac{t_k-t_j}{t_{k-1}-t_{j-1}}tk?1??tj?1?tk??tj??肯定越大越優,所以我們可以按照tk?tjtk?1?tj?1\frac{t_k-t_j}{t_{k-1}-t_{j-1}}tk?1??tj?1?tk??tj??維護一個單調遞增的單調隊列,然后就可以對于每個fifi?1\frac{f_i}{f_{i-1}}fi?1?fi??在單調隊列上二分。
時間復雜度O(mlog?n)O(m\log n)O(mlogn)


codecodecode

#include<cstdio> #include<algorithm> #define ll long long using namespace std; const ll N=110000; ll n,m,t[N],f[N],q[N],g[N],tail; double tan_(ll x,ll y) {return (t[x]-t[y])/(double)(t[x-1]-t[y-1]);} int main() {scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld",&t[i]),t[i]+=t[i-1];for(ll i=1;i<=m;i++)scanf("%lld",&f[i]);for(ll i=1;i<=n;i++){while(tail>1&&tan_(i,q[tail])>tan_(q[tail],q[tail-1])) tail--;q[++tail]=i;}for(ll i=2;i<=m;i++){ll l=0,r=tail;double k=(double)f[i]/(double)f[i-1];while(l<r){ll mid=(l+r)/2;if(tan_(q[mid+1],q[mid])>k) l=mid+1;else r=mid;}g[i]=g[i-1]+t[q[l]]*f[i-1]-t[q[l]-1]*f[i];}printf("%lld",g[m]+t[n]*f[m]); }

總結

以上是生活随笔為你收集整理的jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。