斜率優化技巧 換個角度思考

2022-05-09 22:14:53 字數 2186 閱讀 3567

[bzoj3437]小p的牧場

試題描述

背景小p是個特麼喜歡玩mc的孩紙。。。

描述小p在mc裡有n個牧場,自西向東呈一字形排列(自西向東用1…n編號),於是他就煩惱了:為了控制這n個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站的所有牧場(它西邊第乙個控制站所在的牧場不被控制)(如果它西邊不存在控制站,那麼它控制西邊所有的牧場),每個牧場被控制都需要一定的花費(畢竟在控制站到牧場間修建道路是需要資源的嘛~),而且該花費等於它到控制它的控制站之間的牧場數目(不包括自身,但包括控制站所在牧場)乘上該牧場的放養量,在第i個牧場建立控制站的花費是ai,每個牧場i的放養量是bi,理所當然,小p需要總花費最小,但是小p的智商有點不夠用了,所以這個最小總花費就由你來算出啦。

輸入

第一行乙個整數 n 表示牧場數目

第二行包括n個整數,第i個整數表示ai

第三行包括n個整數,第i個整數表示bi

輸出

只有一行,包括乙個整數,表示最小花費

輸入示例

424

2431

42

輸出示例

9
樣例解釋

選取牧場1,3,4建立控制站,最小費用為2+(2+1*1)+4=9。

資料範圍

對於100%的資料,1<=n<=1000000,0題解

最直接的想法是設f(i)表示前i個牧場全部管理所花的最小費用。

轉移為f(i) = min 其中,sum[i] = b[i] * (n - i + 1) + b[i+1] * (n - i) + ... + b[n]

好,o(n2)的,斜率優化,捯飭一下不等式(j比k優,j < k)

發現得到了乙個這個:(n - i + 1)( f(j) - f(k) ) + sum[j] - sum[k] < 0

怎麼處理都不能把左邊的i去掉,即,左邊的式子總是與i有關,就不能用斜率優化了。

所以我們需要換乙個角度,倒著想。

不難計算出只在第n個牧場放乙個控制站的費用,再在此基礎上減去最大的「省去的費用」即可。

設f(i)表示考慮 i~n 個牧場,並且在第i個牧場放控制站的最大的「省去的費用」。

轉移為f(i) = max - a[i] 其中s[i]表示陣列b的字首和

令 j < k 且 j比k優

f(j) + (j - i) * s[i] > f[k] + (k - i) * s[i]

得 ( f(j) - f(k) ) / (k - j) > s[i],這題可做了

tat又一次被long long坑了。。。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int buffersize = 1

<< 16

;char buffer[buffersize], *head, *tail;

inline

char

getchar()

return *head++;

}int

read()

while(isdigit(c))

return x *f;

}#define maxn 1000010

#define ll long long

intn, a[maxn], b[maxn], l, r, q[maxn];

ll sum, s[maxn], f[maxn];

double slop(int j, int

k) int

main()

printf(

"%lld\n

", ans -tmp);

return0;

}

這兒有你要的**!

換個角度思考大資料

什麼是大資料?idc的權威定義為 滿足4v variety,velocity,volume,value,即種類多 流量大 容量大 價值高 指標的資料稱為大資料。idc對大資料技術的定位為 通過高速捕捉 發現和 或分析,從大容量資料中獲取價值的一種新的技術架構。大資料主要涉及兩個不同的技術領域 一項致...

換個角度思考(牛客4 30 樹狀陣列)

題目鏈結 題目描述 給定乙個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數 即對於詢問 l,r,x l,r,x l,r,x 你需要輸出 i lr a i x sum a i le x i lr ai x 的值 其中 ex p exp exp 是乙個函式,它返回 1 當且僅當 exp 成立...

牛客小白9 換個角度思考 離線 樹狀陣列

題目鏈結 題目描述 給定乙個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數 即對於詢問 l,r,x 你需要輸出 其中 exp 是乙個函式,它返回 1 當且僅當 exp 成立,其中 exp 表示某個表示式 輸入描述 第一行兩個整數n,m 第二行n個整數表示序列a的元素,序列下標從1開始標號...