bzoj1911 [Apio2010]特别行动队——斜率优化DP
2024-09-30 08:02:03
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1911
相当明显的斜率优化,很好做;
注意slp里面要有(double),以免出现精度问题。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int const maxn=1e6+;
ll n,a,b,c,s[maxn],q[maxn],f[maxn];
ll y(int i){return f[i]+a*s[i]*s[i]-b*s[i];}
double slp(int i,int j){return (double)(y(j)-y(i))/(s[j]-s[i])//a;}//在这里/2/a
int main()
{
scanf("%lld%lld%lld%lld",&n,&a,&b,&c);
for(int i=;i<=n;i++)
scanf("%lld",&s[i]),s[i]+=s[i-];
int head=,tail=;
for(int i=;i<=n;i++)
{
while(head<tail&&slp(q[head],q[head+])<=s[i])head++;//则这里没有*2*a,否则需要区分a的正负
int j=q[head];
double tmp=s[i]-s[j];
f[i]=f[j]+a*tmp*tmp+b*tmp+c;
while(head<tail&&slp(q[tail-],q[tail])>slp(q[tail-],i))tail--;//
q[++tail]=i;
}
printf("%lld",f[n]);
return ;
}
最新文章
- java并发编程(十七)Executor框架和线程池
- C算法编程题系列
- AE开发实现Spatial Join Analysis
- Oracle 中循环遍历某张表,并对符合条件的进行Update操作
- 搭建appium的android环境
- hdu 2899 Strange fuction
- android中ListView点击和里边按钮点击不能同时生效问题解决
- TSC打印机使用教程终极版
- python中type dtype astype 的用法
- Java 程序国际化
- sqlmap的安装
- Python 递归 Resursion()
- Jquery实现轮播效果图
- JS原生实现视频弹幕Demo(仿)
- c#帮助文档chm打不开的问题
- 洛谷 P4656: LOJ 2484: [CEOI2017]Palindromic Partitions
- Mac Vim 编辑器
- Oracle12c中性能优化新特性之新增APPROX_COUNT_DISTINCT 快速唯一值计数函数
- 初学SQL语句练习2
- 使用area标签实现标签的嵌套