# 【bzoj1096】仓库建设 斜率优化dp

【题解】

sumb维护b数组的前缀和，sumab维护a*b的前缀和。

/*************
bzoj 1096
by chty
2016.11.15
*************/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAXN 1000100
#define up(i,j,n)  for(ll i=j;i<=n;i++)
namespace INIT{
char buf[1<<15],*fs,*ft;
ll x=0,f=1;  char ch=getc();
while(!isdigit(ch))  {if(ch=='-')  f=-1;  ch=getc();}
while(isdigit(ch))  {x=x*10+ch-'0';  ch=getc();}
return x*f;
}
}using namespace INIT;
void init(){
up(i,1,n) sumb[i]=sumb[i-1]+b[i],sumab[i]=sumab[i-1]+a[i]*b[i];
}
inline double slop(ll j,ll k) {return (double)((f[j]+sumab[j])-(f[k]+sumab[k]))/(double)(sumb[j]-sumb[k]);}
void solve(){
up(i,1,n){
f[i]=f[t]+c[i]+a[i]*(sumb[i-1]-sumb[t])-(sumab[i-1]-sumab[t]);
q[++tail]=i;
}
printf("%lld\n",f[n]);
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
init();
solve();
return 0;
}


posted @ 2016-11-15 13:15  chty  阅读(183)  评论(0编辑  收藏  举报