1096: [ZJOI2007]仓库建设

Posted HWIM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1096: [ZJOI2007]仓库建设相关的知识,希望对你有一定的参考价值。

1096: [ZJOI2007]仓库建设

思路

  斜率优化。

代码

 1 #include<cstdio>
 2 #include<iostream>
 3  
 4 using namespace std;
 5 typedef long long LL;
 6 
 7 const int N = 1000100;
 8 LL f[N],s[N],x[N],p[N],c[N];
 9 int q[N],L,R;
10 
11 inline int read() {
12     int x = 0,f = 1;char ch = getchar();
13     for (; !isdigit(ch); ch=getchar()) if(ch==-) f=-1;
14     for (; isdigit(ch); ch=getchar()) x = x*10+ch-0;
15     return x * f; 
16 }
17 double Slope(int i,int j) {
18     return 1.0*(f[i]+s[i]-f[j]-s[j])/(1.0*(p[i]-p[j]));
19 }
20 int main() {
21     int n = read();
22     for (int i=1; i<=n; ++i) 
23         x[i] = read(),p[i] = read(),c[i] = read();
24     for (int i=1; i<=n; ++i) {
25         s[i] = s[i-1] + 1ll * x[i] * p[i];
26         p[i] += p[i-1];
27     }
28     int L = 1,R = 1;
29     q[1] = 0;
30     for (int i=1; i<=n; ++i) {
31         while (L<R && Slope(q[L],q[L+1]) < (double)x[i]) L++;
32         int j = q[L];
33         f[i] = f[j] + x[i] * (p[i-1] - p[j]) - (s[i-1] - s[j]) + c[i];
34         while (L<R && Slope(q[R-1],q[R]) > Slope(q[R],i)) R--;
35         q[++R] = i; 
36     }
37     cout << f[n];
38     return 0;
39 }

 

以上是关于1096: [ZJOI2007]仓库建设的主要内容,如果未能解决你的问题,请参考以下文章

[bzoj 1096] [ZJOI2007]仓库建设

BZOJ 1096 [ZJOI2007]仓库建设 (斜率优化)

BZOJ1096-[ZJOI2007]仓库建设

bzoj1096[ZJOI2007]仓库建设 斜率优化dp

bzoj1096: [ZJOI2007]仓库建设

bzoj1096 [ZJOI2007]仓库建设