bzoj 1911: [Apio2010]特别行动队

 1 #include<cstdio>
 2 #include<iostream>
 3 #define M 1000009
 4 #define ll long long
 5 using namespace std;
 6 int n,zhan[M],h,t;
 7 ll a,b,c,f[M],sum[M];
 8 double pai(int a1,int a2)
 9 {
10     double ss=(f[a1]-f[a2])/(1.0*a*(sum[a2]-sum[a1]));
11     return ss-sum[a2]-sum[a1];
12 }
13 int main()
14 {
15     scanf("%d%lld%lld%lld",&n,&a,&b,&c);
16     for(int i=1;i<=n;i++)
17       {
18         int a1;
19         scanf("%lld",&a1);
20         sum[i]=sum[i-1]+a1;
21       }
22     h=0;
23     for(int i=1;i<=n;i++)
24       {
25         for(;h<t&&pai(zhan[h],zhan[h+1])>=-b/(1.0*a)-2*sum[i];h++);
26         f[i]=f[zhan[h]]+a*(sum[zhan[h]]-sum[i])*(sum[zhan[h]]-sum[i])+b*(sum[i]-sum[zhan[h]])+c;
27         for(;h<t&&pai(zhan[t-1],zhan[t])<=pai(zhan[t],i);t--);
28         zhan[++t]=i;
29       }
30     printf("%lld\n",f[n]);
31     return 0;
32 }

普通的斜率优化DP。

时间: 2024-08-09 02:17:32

bzoj 1911: [Apio2010]特别行动队的相关文章

斜率优化专题4——bzoj 1911: [Apio2010] 特别行动队 题解

[原题] 1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 2134  Solved: 911 [Submit][Status] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT [分析]只要跟着我前面的题目走,这道题真的是太水了.神马题解都不用参考,公式随便推. 易知方程是f[i]=max(f[j]+

BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT f[i]=max{f[j]+...} 随便一化就好了 (a*(s[k]*s[k]-s[j]*s[j])+f[k]-f[

bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)

1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3191  Solved: 1450[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT Source [思路] 斜率优化. 设f[i]表示将前i个分组的最优值,则有转移方程式: f[i]=max{ f[j]

BZOJ 1911: [Apio2010]特别行动队( dp + 斜率优化 )

sum为战斗力的前缀和 dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤p<x) 然后斜率优化...懒得写下去了... -------------------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std; typedef long long ll; const in

1911: [Apio2010]特别行动队

Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 5706  Solved: 2876[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT 似乎逐渐掌握了斜率优化的规律,,, 1 #include<iostream> 2 #include<cstdio> 3 using namespac

Bzoj1911 [Apio2010]特别行动队

1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3969  Solved: 1873 Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT Source 斜率优化DP f[分组末尾]=最优解 f[i] = max{f[j]+A(s[i]-s[j])^2+B(s[i]-s[j])+C}  (0<=j<i)

[Apio2010]特别行动队

1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT 斜率优化的式子搞出来之后,a是负的,所以要么不除过去,要么除过去变号 #include<cstdio> #include<iostream> #includ

bzoj1911[Apio2010]特别行动队 斜率优化dp

1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 5057  Solved: 2492[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT dp[i]=dp[j]+a*x*x+b*x+cx=sum[i]-sum[j] 证明单调性假设对于i点 k<j且j的决策

APIO2010特别行动队(单调队列、斜率优化)

其实这题一看知道应该是DP,再一看数据范围肯定就是单调队列了. 不过我还不太懂神马单调队列.斜率优化-- 附上天牛的题解:http://www.cnblogs.com/neverforget/archive/2012/04/19/2456483.html 1 var f,g:array[0..1000050] of int64; 2 s,q:array[0..1000050] of longint; 3 a,b,c,n,i,h,t,x:longint; 4 bestk:double; 5 pro