首页 > 代码库 > BZOJ 1096
BZOJ 1096
const maxm=1e100; maxn=1000001; var f,x,p,c,sum,cost:array[0..maxn] of int64; q:array[0..maxn] of longint; n,i,h,t:longint; function calc(j,i:longint):int64; begin calc:=cost[i]-cost[j]-sum[j]*(x[i]-x[j]); end; function slope(j,k:longint):extended; var tmp:int64; begin tmp:=f[k]-f[j]-cost[k]+cost[j]+sum[k]*x[k]-sum[j]*x[j]; if sum[k]=sum[j] then if tmp>=0 then exit(maxm) else exit(-maxm); slope:=tmp/(sum[k]-sum[j]); end; begin readln(n); for i:=1 to n do readln(x[i],p[i],c[i]); for i:=1 to n do sum[i]:=sum[i-1]+p[i]; for i:=1 to n do cost[i]:=cost[i-1]+sum[i-1]*(x[i]-x[i-1]); for i:=1 to n do begin while (h<t)and(slope(q[h],q[h+1])<x[i]) do inc(h); f[i]:=f[q[h]]+calc(q[h],i)+c[i]; while (h<t)and(slope(q[t-1],q[t])>slope(q[t],i)) do dec(t); inc(t); q[t]:=i; end; writeln(f[n]); end.
BZOJ 1096
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。