`
darren_nizna
  • 浏览: 72577 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

[HNOI2008][玩具装箱toy][斜率优化]

J# 
阅读更多

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

int const N= 50010;
int n, L;
typedef long long LL;
LL dp[N], sum[N], A[N], B[N]; 
int que[N], data[N];

/*
dp[i]= min{ dp[j]+ ( s[i]- s[j]+ i- j- 1- L )^2 }
令 A[i]= s[i]- i; B[j]= s[j]+ j+ 1+ L
原方程化为
dp[i]= min{ dp[j]+ ( A[i]- B[j] )* ( A[i]- B[j] ) } 
*/

LL G( int j, int k ){
	return dp[j]- dp[k]+ B[j]* B[j]- B[k]* B[k];
}

LL S( int j, int k ){
	return 2* ( B[j]- B[k] );
}

int main(){
	scanf("%d%d",&n,&L);
	for( int i= 1; i<= n; ++i ){
		scanf("%d", data+ i );
		sum[i]= sum[i-1]+ data[i];
	}
	for( int i= 1; i<= n; ++i ){
		A[i]=  sum[i]+ i;
		B[i]=  sum[i]+ i+ 1+ L;
	}B[0]= 1+ L;
	
	int head= 0, tail= 0; que[0]= 0;
	for( int i= 1; i<= n; ++i ){
		while( head< tail && G( que[head+ 1], que[head] )<= A[i]* S( que[head+ 1], que[head] ) )
		head++;
		
		dp[i]= dp[ que[head] ]+ ( A[i]- B[ que[head] ] )* ( A[i]- B[ que[head] ] );

		while( head< tail && G( que[tail], que[tail- 1] )* S( i, que[tail] )>=
		                     S( que[tail], que[tail- 1] )* G( i, que[tail] ) ) tail--;
		                     
		que[++tail]= i;
	}
	
	cout << dp[n] << endl;
	
	return 0;
}
 
分享到:
评论

相关推荐

    wsgan001#algorithms-6#第09章_单调性优化1

    第09章 单调性优化9.1 斜率优化主要是针对线性模型,参考博客:HNOI2008 玩具装箱TOY 和【学习笔记】动态规划—斜率优化DP(超详细)+ HDU 3

    HNOI2018训练.rar

    [HNOI2008]GT考试 [HNOI2008]遥远的行星 [JSOI2008]星球大战 [SDOI2008]洞穴勘测 [ZJOI2008]瞭望塔 [ZJOI2008]骑士 [ZJOI2008]树的统计 [HNOI2010]弹飞绵羊(LCT) [HNOI2010]公交线路 [HNOI2010]物品调度 [CQOI2011...

    HNOI2014题解及数据

    【HNOI2014题解及数据】是一份针对中国高中生信息学奥林匹克竞赛(HNOI)2014年的参赛者准备的重要资源。这份资料包包含了当年比赛的题目解析、样例代码和相关的数据集,对于参赛者或者对信息学竞赛有兴趣的学习者来...

    HNOI2014数据+所有程序

    标题中的“HNOI2014数据+所有程序”指的是2014年全国青少年信息学奥林匹克竞赛(HNOI)的数据集和参赛程序。HNOI是中国信息学奥林匹克竞赛的一部分,通常包括预赛(NOIP)、省选以及决赛(NOI)。这个压缩包可能包含...

    HNOI2004 高精度开根

    [HNOI2004] 高精度开根代码

    HNOI模拟 2016.3.31 百步穿杨

    标题 "HNOI模拟 2016.3.31 百步穿杨" 提供的信息表明,这是一个关于HNOI(高中生信息技术奥林匹克竞赛)的模拟比赛,具体日期为2016年3月31日。"百步穿杨"可能是这次模拟赛的主题或者其中一道题目,寓意参赛者需要...

    用单调性优化动态规划

    **例三:Toy HNOI08** **题目描述** 给定一个长度为n的序列,要求从中选择一个长度为k的子序列,使得该子序列的最小值尽可能大。 **朴素的解法** 直接枚举所有可能的长度为k的子序列,并计算每个子序列的最小值...

    动态规划试题分析

    以上案例展示了动态规划在解决各种问题中的应用,从简单的任务分配到复杂的序列优化问题,动态规划提供了一种系统的方法来高效地解决问题。通过定义合适的状态和设计合理的状态转移方程,动态规划能够帮助我们找到最...

    wangjunrui666#bzoj-problem##2000. [Hnoi2010]stone 取石头游戏1

    然后两个玩家轮流来取石子,每次每个玩家可以取走一堆中的所有石子,但有一个限制条件:一个玩家若要取走一堆石子,则与这堆石子相邻的某堆石子已被取走(之前被某个玩家取

    Luogu P2278 [HNOI2003]操作系统

    操作系统是计算机科学中的核心课程,它管理着计算机的硬件资源,包括CPU,以高效地执行各种任务。在本题中,我们关注的是操作系统如何调度任务,特别是如何处理具有优先级的任务。问题描述了一个简单的多任务环境,...

    农夫果园实例 葡萄:Grape草莓:Strawberry苹果:Apple

    设计题目:农夫果园 一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果: 葡萄:Grape 草莓:Strawberry 苹果:Apple 水果与其他的植物有很大的不同,水果最终是可以采摘食用的。...

    信息学奥赛培训动态规划试题分析

    5. **快餐问题(HNOI’99)**:这个问题可能涉及如何规划送餐员的路线,使得在规定时间内完成所有订单,需要考虑时间窗口和路线规划的优化。 6. **求函数最大值(CTSC'95)**:这可能是一个关于在一定范围内寻找某个...

    「AHOI / HNOI2018」毒瘤 (DDP)(链分治)

    LOJLOJLOJ 传送门 题解:首先考虑一棵树怎么做,就是树形 dpdpdp,然后我们可以枚举每一条边怎么选,显然有 3 种情况 进一步发现只需要枚举两种,即强制 uuu 选 vvv 不选,和强制 uuu 不选 vvv 随意 ...

    非常不错的动态规划试题详细分析

    它通过将一个大问题分解为多个小问题,并存储每个小问题的解,以避免重复计算,从而达到优化求解效率的目的。本篇文章将对一系列经典的动态规划题目进行详细分析,帮助NOIP(全国青少年信息学奥林匹克竞赛)的参赛者...

    动态规划经典习题.pdf

    7. 实际问题的动态规划应用:文档中提及了POI(波兰信息学竞赛)和HNOI(中国国家信息学奥林匹克竞赛)等竞赛中实际问题的动态规划解决方案。 动态规划的习题训练对提高算法设计和解决问题的能力至关重要,尤其是...

    Windows 2003 域的重命名

    Windows 2003 域的重命名 视频教材

    全面的动态规划资料(原理和题以及解答)

    动态规划是一种重要的算法思想,广泛应用于计算机科学,特别是在解决复杂优化问题时。它通过将大问题分解为子问题,然后逐步构建最优解,避免了重复计算,提高了效率。以下是关于动态规划的一些关键知识点: 1. **...

Global site tag (gtag.js) - Google Analytics