【斜率优化DP】特别行动队

原创 2012年03月24日 19:28:01

还是斜率优化。还是很简单。略过。注意一下B的那一项是可以分离出来的,和i、j都是无关的,速度快点。这里没有给出实现。

但是C是不能分离的,分离出来,C是和分的数量有关的,就会方程必须增加一维。。。


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
typedef long long ll;
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)

long q[1000005];
long n;
long A;
long B;
long C;
long fight[1000010];
ll sum[1000010];
ll f[1000010];
long que[1000010];
long l = 0;
long r = 0;

inline long getint()
{  
    long ret = 0;  
    char tmp;  
    while (!isdigit(tmp = getchar()));  
    do {  
        ret = (ret << 3)+(ret << 1) + tmp - '0';  
    } while (isdigit(tmp = getchar()));  
    return ret;
}  

ll Calc(long j,long k)
{
	return f[j]-f[k]+A*(sum[j]*sum[j]-sum[k]*sum[k])-B*(sum[j]-sum[k]);
}

int main()
{
	freopen("commando.in","r",stdin);
	freopen("commando.out","w",stdout);
	n = getint();
	A = -getint();
	scanf("%ld%ld",&B,&C);
	for (long i=1;i<n+1;++i)
	{
		fight[i] = getint();	
		sum[i] = sum[i-1]+(ll)fight[i];
	}
	//A < 0
	//Initializaion
	for (long i=1;i<n+1;i++)
		f[i] = -0x7f7f7f7f;

	for (long i=1;i<n+1;i++)
	{
		while (l<r&&Calc(q[l],q[l+1])<=2*A*sum[i]*(sum[q[l]]-sum[q[l+1]]))l++;
		long ch = q[l];long x=sum[i]-sum[ch];
		f[i] = f[ch] + A*x*x+x*B+C;
		while (l<r&&Calc(q[r-1],q[r])*(sum[q[r]]-sum[i])<=Calc(q[r],i)*(sum[q[r-1]]-sum[q[r]]))r--;
		q[++r] = i;
	}
	std::cout << f[n];
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【完美的牛栏】二分图匹配

描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术。不幸的是,由于工程问题,每个牛栏都不一样。第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意...

【过河问题】解题报告

2.过河问题(river.c/cpp) [问题描述] 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸。而东岸边有一条小船。 船太小了,一次只能乘坐两人。每...

一个OI的失败者的独白

再见OI     记录了我的友谊,我的成功与失败,我的欢乐与悲伤的OI路程,在这里,再做郑重的告别。你是我高中最美好的回忆,我将你尘封在这里,这个小小的博客里,但我害怕多年也不会有人再提及你,我...

[APIO2010]特别行动队(斜率优化dp)

【题解】 设s[i]=x[1]+x[2]+……+x[i] 则:f[0]=0     f[i]=max{ f[j]+zdl(s[i]-s[j]) } ( i>0 , 0      若 j不比k...

BZOJ 1911 APIO 2010 特别行动队 斜率优化DP

题目大意:有一些排列好的士兵,现在要把他们组成一些队伍,每个队伍的战斗力为ax^2 + bx + c,其中x是队伍的权值和。 思路:我还能不能和斜率优化DP好好的玩耍了。。这公式推了三次才推...

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

点击打开链接 思路: 斜率优化。 设f[i]表示将前i个分组的最优值,则有转移方程式: f[i]=max{ f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c } 经过...

【bzoj 1911】 [Apio2010]特别行动队(斜率优化dp)

檐下、窗间,枝桠斜映,一缕茶香袅袅升

BZOJ 1911-特别行动队(DP+斜率优化)

1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 4662  Solved: 2253 [Submit][Sta...

<斜率优化><单调队列>——1.【APIO2010】特别行动队

斜率优化和单调队列的学习总结

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

【原题】 1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 2134  Solved: 911 [Submi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)