1911: [Apio2010]特别行动队
Submit: 5706 Solved: 2876
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
4
-1 10 -20
2 2 3 4
-1 10 -20
2 2 3 4
Sample Output
9
HINT
似乎逐渐掌握了斜率优化的规律,,,
f[i]=max{f[j]+a*(sum[i]-sum[j])2+b*(sum[i]-sum[j]+c}
斜率优化,设k<j<i,且j比k更优
\[f[i]-f[k]+a(s[j]^{2}-s[k]^{2})+b(s[k]-s[j])>2a\times s[i]\times (s[j]-s[k])\]
化为:(注意a为负数!!!要变号)
\[\frac{f[i]-f[k]+a(s[j]^{2}-s[k]^{2})+b(s[k]-s[j])}{2a(s[j]-s[k])}<s[i]\]
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 #define LL long long 6 #define sqr(x) ((x)*(x)) 7 const int MAXN=1000005; 8 9 int n,a,b,c; 10 int l,r,q[MAXN]; 11 LL f[MAXN],s[MAXN]; 12 13 LL cal(LL x) 14 { 15 return a*sqr(x)+b*x+c; 16 } 17 18 double slope(int k,int j) 19 { 20 return (double)(f[j]-f[k]+a*(sqr(s[j])-sqr(s[k]))+b*(s[k]-s[j]))/(2*a*(s[j]-s[k])); 21 } 22 23 int main() 24 { 25 scanf("%d",&n); 26 scanf("%d%d%d",&a,&b,&c); 27 for(int i=1;i<=n;i++) 28 { 29 int x; 30 scanf("%d",&x); 31 s[i]=s[i-1]+x; 32 } 33 for(int i=1;i<=n;i++) 34 { 35 while(l<r&&slope(q[l],q[l+1])<s[i]) l++; 36 int t=q[l]; 37 f[i]=f[t]+cal(s[i]-s[t]); 38 while(l<r&&slope(q[r],i)<slope(q[r-1],q[r])) r--; 39 q[++r]=i; 40 } 41 printf("%lld",f[n]); 42 return 0; 43 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)