bzoj 3437 小P的牧場(斜率優化DP)

2021-07-25 05:34:43 字數 1555 閱讀 7659

time limit: 10 sec  

memory limit: 128 mb

submit: 994  

solved: 566 [

submit][

status][

discuss]背景

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

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

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

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

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

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

42424

3142

9樣例解釋

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

資料範圍與約定

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

kpmcup#0 by greens [

submit][

status][

discuss]

#include#include#include#include#include#define n 1000003

#define ll long long

using namespace std;

ll f[n],a[n],b[n],sum[n],sum1[n],c[n];

int head,tail,q[n];

int n;

/*ll calc(int x,int y)

*/ll calc(int j,int i)

ll k(int i)

ll b(int j)

int pd(int x1,int x2,int x3)

int main()

{ freopen("a.in","r",stdin);

scanf("%d",&n);

for (int i=1;i<=n;i++) scanf("%i64d",&a[i]);

for (int i=1;i<=n;i++) scanf("%i64d",&b[i]);

for (int i=1;i<=n;i++) sum1[i]=sum1[i-1]+b[i];

for (int i=1;i<=n;i++) c[i]=b[i]*(ll)(n-i);

for (int i=1;i<=n;i++) sum[i]=sum[i-1]+c[i];

//for (int i=1;i<=n;i++) cout//cout<

bzoj 3437 小P的牧場(斜率DP)

time limit 10 sec memory limit 128 mb submit 1493 solved 830 submit status discuss 小p在mc裡有n個牧場,自西向東呈一字形排列 自西向東用1 n編號 於是他就煩惱了 為了控制這n個牧場,他需要在某些牧場上面建立控制站...

bzoj 3437 小P的牧場 斜率優化

time limit 10 sec memory limit 128 mb 小p在mc裡有n個牧場,自西向東呈一字形排列 自西向東用1 n編號 於是他就煩惱了 為了控制這n個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站...

bzoj3437 小p的牧場 斜率優化dp

背景 小p是個特麼喜歡玩mc的孩紙。描述小p在mc裡有n個牧場,自西向東呈一字形排列 自西向東用1 n編號 於是他就煩惱了 為了控制這n個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站的所有牧場 它西邊第乙個控制站所在的...