這題首先要轉化一下這裡對於 \(s\) 的統計
我們先把 \(s\) 做字尾貢獻
然後就有了這個式子:
\[f_i=\min_^ f_j+ (s1_i-s1_j)\times s2_i+s\times(s1_n-s1_j)
\]其中
\[s1_i=\sum_^ c_j\ \ \ \ \ s2_i=\sum_^ t_j
\]然後我們推式子:
最後是個:
\(x且
\[\frac
右側是個單調增的,所以是個下凸殼
然後就沒了
如果我們不保證 \(t_i\) 單調呢?
我們照樣維護乙個下凸殼
然後每次在這裡面找決策點的時候二分一下
具體見**:
#includeusing namespace std;
#define int long long
namespace yspm
const int n=3e5+10;
int t[n],c[n],n,s,f[n],q[n],he,ta;
inline double x(int p)
inline double y(int p)
inline double slope(int x,int y)
inline int work(double val)
printf("%lld\n",f[n]);
return 0; }}
signed main()
SDOI2012 任務安排
機器上有n個需要處理的任務,它們構成了乙個序列。這些任務被標號為1到n,因此序列的排列為1,2,3.n。這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時...
任務安排 SDOI2012
有乙個數列,每個元素均有乙個完成耗時 t i 與完成耗費 f i 每個元素的耗費等於其完成時刻乘以完成耗費。可以將這些元素分為任意組,每一組的元素完成時刻一樣。每一組都會有乙個固定的額外時間耗費 s 資料範圍 3 10 5 首先推出狀態轉移方程 dp i min dp j s sumf n sumf...
bzoj 2726 SDOI2012 任務安排
機器上有n個需要處理的任務,它們構成了乙個序列。這些任務被標號為1到n,因此序列的排列為1,2,3 n。這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti 在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時...