[bzoj 2726] 任務安排 (斜率優化 線性dp)

3月14日第三題!!!(雖然是15號發的qwq)
Description
機器上有N個需要處理的任務,它們構成了一個序列。這些任務被標號為1到N,因此序列的排列為1,2,3…N。這N個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是Ti。在每批任務開始前,機器需要啟動時間S,而完成這批任務所需的時間是各個任務需要時間的總和。注意,同一批任務將在同一時刻完成。每個任務的費用是它的完成時刻乘以一個費用系數Fi。請確定一個分組方案,使得總費用最小。
Input
第一行兩個整數,N,S。
接下來N行每行兩個整數,Ti,Fi。
Output
一個整數,為所求的答案。
Sample Input
5 1
1 3
3 2
4 3
2 3
1 4
Sample Output
153
HINT
Source

補:范圍:
1<=N<=3*10^5,0<=s,ci<=512,-512<=ti<=512.

數據較小版本(n^2即可)請點這:http://blog.csdn.net/ye_xingyu/article/details/79562237
斜率優化,斜率為(s+sumT[i]),當截距最小時的f[i]就是當前最優決策
注意:ti有負數,則sumT[i]不具有單調性要把隊列中全部存著(隊尾仍可去掉無用決策即不滿足下凸性)用二分每次找到左側斜率小于當前斜率右側大于的位置,直接用方程轉移(即不用min)

code:

//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;const int MAX=300010;
const int INF=0x3f3f3f3f;
int n,s,l,r;
long long ti[MAX],fi[MAX],f[MAX],q[MAX];
//注意開long long 前綴和還是很大的,我因為這個wa兩次QAQint search(int k) {if(l==r) return q[l];int L=l,R=r;while(L<R) {int mid=(L+R)>>1;if(f[q[mid+1]]-f[q[mid]]<=k*(fi[q[mid+1]]-fi[q[mid]])) L=mid+1;else R=mid;}return q[L];
}int main() {scanf("%d %d",&n,&s);for(int i=1;i<=n;i++) {scanf("%lld %lld",&ti[i],&fi[i]);ti[i]+=ti[i-1];fi[i]+=fi[i-1];}r=l=1;for(int i=1;i<=n;i++) {int p=search(s+ti[i]);f[i]=f[p]-(s+ti[i])*fi[p]+ti[i]*fi[i]+s*fi[n];while(l<r && (f[q[r]]-f[q[r-1]])*(fi[i]-fi[q[r]])>=(f[i]-f[q[r]])*(fi[q[r]]-fi[q[r-1]])) r--;q[++r]=i;}printf("%lld",f[n]);return 0;
}

通過這個題重新復(zi)習(xue)了下斜率優化感覺斜率優化就是來一個維護比值單調的隊列(這個值就對應線性規劃的坐標系中的斜率)從中選出最優決策。(不過感覺弄方程變形又弄變量有點麻煩233~)
期待之后有關斜率優化的繼續學習與練習( ̄▽ ̄)/。

轉載于:https://www.cnblogs.com/Menteur-Hxy/p/9248003.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390060.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2018年,牛客網小白月賽5

第一次啊&#xff0c;補題&#xff0c;希望大佬批評。 題目按我補題順序來的。 https://www.nowcoder.com/acm/contest/135#question H 題 最大公倍數 題意:給出兩個數&#xff0c;求最大公倍數 歐幾里德算法算出最大公約數k; 然后算出。最大公倍數即可 代碼如下&#xff1a; …

292. Nim 游戲

292. Nim 游戲 你和你的朋友&#xff0c;兩個人一起玩 Nim 游戲&#xff1a; 桌子上有一堆石頭。你們輪流進行自己的回合&#xff0c;你作為先手。每一回合&#xff0c;輪到的人拿掉 1 - 3 塊石頭。拿掉最后一塊石頭的人就是獲勝者。 假設你們每一步都是最優解。請編寫一個函…

0710 mux協議的作用(ppp撥號時如何和gprs進行at指令交互)

ppp撥號使gprs上網的同時如何和gprs模塊進行at指令的交互&#xff0c;這是一個問題。 在linux中&#xff0c;ppp撥號上網是內核中支持的&#xff0c;只需要在內核配置中選上。 ppp撥號的方式使gprs進行上網與at指令使gprs上網&#xff0c;兩者之間有不同。ppp是一個將用at指令使…

爬蟲筆記(十二)——瀏覽器偽裝技術

為什么要進行瀏覽器偽裝技術&#xff1f; 有一些網站為了避免爬蟲的惡意訪問&#xff0c;會設置一些反爬蟲機制&#xff0c;對方服務器會對爬蟲進行屏蔽。常見的飯爬蟲機制主要有下面幾個&#xff1a; 1. 通過分析用戶請求的Headers信息進行反爬蟲 2. 通過檢測用戶行為進行反…

650. 只有兩個鍵的鍵盤

650. 只有兩個鍵的鍵盤 最初記事本上只有一個字符 ‘A’ 。你每次可以對這個記事本進行兩種操作&#xff1a; Copy All&#xff08;復制全部&#xff09;&#xff1a;復制這個記事本中的所有字符&#xff08;不允許僅復制部分字符&#xff09;。Paste&#xff08;粘貼&#x…

Codeforces 626F Group Projects (DP)

題目鏈接 8VC Venture Cup 2016 - Elimination Round 題意 把$n$個物品分成若干組&#xff0c;每個組的代價為組內價值的極差&#xff0c;求所有組的代價之和不超過$k$的方案數。 考慮DP&#xff0c;$f[i][j][k]$表示考慮到第$i$個物品的時候&#xff0c;還有$j$組尚未分配完…

《活出生命的意義》:人生有何意義?

在你一生的閱讀體驗中&#xff0c;如果能夠有一本書&#xff0c;它的某個章節、某種思想、或者某句話能夠觸動你的內心&#xff0c;解決你的困惑&#xff0c;甚至能改變你的命運&#xff0c;那這樣的一本書你一定要視如珍寶&#xff0c;經常翻閱&#xff0c;維克多弗蘭克爾的《…

右鍵添加git-bash

主要&#xff1a; 右鍵如果沒有git-bash&#xff0c;如何給右鍵手動添加 前面對右鍵存在git-bash但使用出現問題的解決&#xff0c;也想到如果右鍵都沒有&#xff0c;該如何給右鍵添加了&#xff0c;于是接著記錄下如何添加的過程&#xff1a; 情形&#xff1a; 手動給右鍵添加…

Weblogic的緩存

2019獨角獸企業重金招聘Python工程師標準>>> 最近遇到一個關于weblogic緩存的問題。再把war包放入到weblogic指定目錄啟動以后&#xff0c;訪問頁面信息沒有更新。最后發現是\weblogic\user_projects\domains\base_domain\servers\AdminServer下的文件沒有清除&…

725. 分隔鏈表

725. 分隔鏈表 給你一個頭結點為 head 的單鏈表和一個整數 k &#xff0c;請你設計一個算法將鏈表分隔為 k 個連續的部分。 每部分的長度應該盡可能的相等&#xff1a;任意兩部分的長度差距不能超過 1 。這可能會導致有些部分為 null 。 這 k 個部分應該按照在鏈表中出現的順…

LAMP介紹-MySQL安裝

2019獨角獸企業重金招聘Python工程師標準>>> LAMP: linux-apache-mysql-php &#xff08;安裝方式有&#xff1a;rpm&#xff0c;源碼&#xff0c;二進制免編譯&#xff09; linux-操作系統 apache-web服務軟件&#xff08;httpd&#xff09; mysql-存儲數據庫 php…

總結verilog產生隨機數的$random和seed

$random(seed)是verilog中最簡單的產生隨機數的系統函數。 在調用系統函數$random(seed)時&#xff0c;可以寫成三種樣式&#xff1a;1&#xff09;$random&#xff0c;2&#xff09;$random()&#xff0c;3&#xff09;$random(seed)。下面分別說明&#xff1a; 1&#xff09;…

326. 3的冪

326. 3的冪 給定一個整數&#xff0c;寫一個函數來判斷它是否是 3 的冪次方。如果是&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 整數 n 是 3 的冪次方需滿足&#xff1a;存在整數 x 使得 n 3x 示例 1&#xff1a;輸入&#xff1a;n 27 輸出&#x…

Lottie 站在巨人的肩膀上實現 Android 酷炫動畫效果

說到動畫效果&#xff0c;一般都會感到很高端&#xff0c;感覺很酷炫&#xff1b;而小菜技術有限&#xff0c;稍復雜的動畫效果也需要很多時間處理&#xff0c;但是遇到時間緊任務重的情況該怎么辦呢&#xff1f;那就嘗試一下 Lottie 吧&#xff0c;酷炫的動畫集成卻相當簡單&a…

正則表達式(讀書過程所記未整理)

\d 表示一位數字字符 \d{3} 表示3個數字字符 匹配電話比如400-400-1118 import re phone_number re.compile(r\d{3}-\d{3}-\d{4}) mo phone_number.search(rfor a number is 400-400-4000) print(mo.group()) ************************************************************…

java1

不知道為啥粘貼的圖片是一堆編碼。。。。 如何插入圖片 博客后后臺MarkDown編輯器上只有一個按鈕&#xff0c;就是用來上傳圖片并自動插入MarkDown標記的&#xff0c;超級好用 &#xff08;一&#xff09;學習總結 1.在java中通過Scanner類完成控制臺的輸入&#xff0c;查閱JDK…

430. 扁平化多級雙向鏈表

430. 扁平化多級雙向鏈表 多級雙向鏈表中&#xff0c;除了指向下一個節點和前一個節點指針之外&#xff0c;它還有一個子鏈表指針&#xff0c;可能指向單獨的雙向鏈表。這些子列表也可能會有一個或多個自己的子項&#xff0c;依此類推&#xff0c;生成多級數據結構&#xff0c…

PHPstudy搭建本地環境的網頁加載速度慢的解決方案

PHP5.3以上&#xff0c;如果數據庫鏈接地址是localhost&#xff0c;會自動檢測最終的地址是IPV4還是IPV6&#xff0c;所以會比較慢。解決辦法&#xff1a;修改數據庫的鏈接地址&#xff0c;將localhost改為127.0.0.1即可。 原文鏈接&#xff1a;https://chasjd.com/posts/fb433…

標記偏見_分析師的偏見

標記偏見“Beware of the HiPPO in the room” — The risks and dangers of top-down, intuition-based decision making are well known in the business world. Experimentation and data-based decision making become widely acknowledged as the right way to steer a bu…

scott登錄查詢常用語句

一、簡單查詢 1.簡單查詢select * from emp;--查詢表emp中的所有數據select empno as id,ename as name from emp;--查詢表emp中的empno顯示為id&#xff0c;ename顯示為name 2.去除重復select distinct job from emp;--將表emp中的job去重select distinct job,deptno from emp…