【斜率优化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;
}


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

世界是美丽的 就算充满悲伤和泪水 也请睁开你的双眼 去做你想要做的事情 成为你想要成为的人 去找到你的朋友 不必焦躁 慢慢地去长大...
  • Clove_unique
  • Clove_unique
  • 2016年04月23日 09:49
  • 686

[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...
  • cjk_cjk
  • cjk_cjk
  • 2015年05月06日 02:22
  • 318

【APIO2010】特别行动队(斜率优化dp)

一路走来形单影只 转身回望大家已经远去 即使如此我依然前行 这正是我的坚强...
  • Blue_CuSO4
  • Blue_CuSO4
  • 2017年03月28日 11:39
  • 148

【bzoj1911】特别行动队 斜率优化dp

#include #include #include #include #include #include #include using namespace std; typedef long lon...
  • chty2018
  • chty2018
  • 2016年11月14日 17:02
  • 145

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

【APIO2010T1】特别行动队-DP斜率优化
  • Maxwei_wzj
  • Maxwei_wzj
  • 2017年04月29日 17:24
  • 117

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

看到这道题会很容易想到是动态规划。 然后朴素的方程也很容易写出: 用f[i]表示将前i个士兵分组得到的最大战斗力,sum[i]表示前i个士兵战斗力总和 f[i] = max{f[i], f[j]...
  • njlcazl
  • njlcazl
  • 2013年04月09日 21:33
  • 458

【斜率优化】特别行动队

特别行动队 【问题描述】 你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分 成若干特别行动队调入战场。出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i,i...
  • LCWLH
  • LCWLH
  • 2012年03月23日 21:29
  • 11942

bzoj1911 特别行动队 斜率优化

斜率优化最裸的裸题,但是式子推了好久,忘了形式。#include #include #include #include #define LL long long using namespace std...
  • Loi_a
  • Loi_a
  • 2016年09月21日 21:16
  • 153

[斜率优化] 特别行动队 commando

特别行动队 【问题描述】 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分成若干特别行动队调入战场。出于默契的考虑,同一支特别行动队中队员的编号应该连续,即为形如(i, ...
  • JerryDung
  • JerryDung
  • 2012年10月18日 19:10
  • 11139

apio2010特别行动队(斜率优化)

这题是上凸形, 题目当中,还是要注意括号的问题。。因为括号套错了一层RE了好几次 关于,斜率优化,感觉一般的常数项,和i有关的就都放在右边吧,比如已知的那些常量,由此尽量保证左边的上下分子分母...
  • zhhx2001
  • zhhx2001
  • 2016年08月11日 15:13
  • 134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【斜率优化DP】特别行动队
举报原因:
原因补充:

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