动态规划(算法竞赛、蓝桥杯)--斜率优化DP打印文章

1、B站视频链接:E51【模板】斜率优化DP 打印文章_哔哩哔哩_bilibili

题目链接:Problem - 3507

cpp 复制代码
#include <bits/stdc++.h> 
using namespace std;
typedef long long LL;
const int N=500010;
int n,m,q[N];
LL s[N],f[N];

double sl(int i,int j){
	return (double)(f[i]+s[i]*s[i]-f[j]-s[j]*s[j])
				/(s[i]==s[j]?1e-9:s[i]-s[j]);
}
int main(){
	while(~scanf("%d%d",&n,&m)){
		for(int i=1;i<=n;i++){
			scanf("%lld",&s[i]);
			s[i]+=s[i-1];
		}
	}
	int h=1,t=0;
	for(int i=1;i<=n;i++){
		while(h<t&&sl(i-1,q[t])<=sl(q[t],q[t-1]))t--;
		q[++t]=i-1;
		while(h<t&&sl(q[h+1],q[h])<=2*s[i])h++;
		int j=q[h];
		f[i]=f[j]+(s[i]-s[j])*(s[i]-s[j])+m;
	}
	printf("%lld\n",f[n]);
	return 0;
}
相关推荐
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
爱敲代码的憨仔1 小时前
《线性代数的本质》
线性代数·算法·决策树
yigan_Eins1 小时前
【数论】莫比乌斯函数及其反演
c++·经验分享·算法
阿史大杯茶1 小时前
AtCoder Beginner Contest 381(ABCDEF 题)视频讲解
数据结构·c++·算法
დ旧言~2 小时前
【高阶数据结构】图论
算法·深度优先·广度优先·宽度优先·推荐算法
张彦峰ZYF2 小时前
投资策略规划最优决策分析
分布式·算法·金融
The_Ticker2 小时前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
爪哇学长3 小时前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
Dola_Pan3 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法
繁依Fanyi3 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse