首页 > 其他分享 >一个经典的区间 dp 问题

一个经典的区间 dp 问题

时间:2023-02-14 23:11:07浏览次数:27  
标签:表示 le 个点 min 贡献 经典 区间 dp

有一个数轴,上面有 \(n\) 个点,坐标为 \(a_1,\cdots,a_n\)。

你一开始在位置 \(S\),你可以以 \(1\) 的速度行走。

令 \(t_i\) 表示第一次走到第 \(i\) 个点的时间,最小化 \(\sum t_i\)。

\(n \le 10^6\)


一般的 dp 方法,设 \(dp_{L,R,0/1}\) 表示已经走过 \([L,R]\),目前站在那一侧的答案,是难以做到低于 \(O(n^2)\) 复杂度的。

尝试是否能将左右的贡献分开。

我们给每个点预先分配一个贡献:如果点 \(i\) 已经被经过,那么贡献就是它被经过的时间;否则它的贡献是以最快方式抵达它时的时间。

此时可以发现:如果钦定某个时刻向右走,那么所有你右侧的点在你走动时不会产生贡献!

令 \(f_i (a_i\le S)\) 表示走到点 \(i\),最小的总贡献和(\(g_i\) 表示 \(i>S\) 的贡献),这是可以转移的!

具体来说:

\[f_i = \min_j\{ g_j+2(a_j-a_i)(n-j)\} \\ g_i = \min_j\{ f_j+2(a_i-a_j)(j-1)\} \]

感受一下可以知道存在线性做法。

标签:表示,le,个点,min,贡献,经典,区间,dp
From: https://www.cnblogs.com/havzriu/p/17119853.html

相关文章

  • 中高等DP总结(更新中
    1.CF613DKingdomanditsCities题意:给定一棵树,每个询问给出一些关键点,要求删掉最少的点使这些点两两不联通,无解输出-1。思路:先判无解:只要有一个关键点的父亲也是关键点......
  • 通过HH8WilEdit学习WIL 文件编码 5 delpic, outpic, AddOne, AddPic 文件单元
    unitmain;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,SUIForm,SUIButton,StdCtrls,SU......
  • 经典文章:1-10
    1.为什么你应该(从现在开始就)写博客​​​http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/​​2.如何在三个月内获得三年的工作经验​javascript:void(0......
  • Java POI导出excel经典实现-交叉报表斜表头
    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能,介绍poi导出e......
  • C经典 关于一维数组指针
    说明:1)一维数组指针表示方法int*p=a而非int*p=&a也可int*p=&a[0]表示2)p+1或a+1表示的是指向下一个地址#include<stdio.h>intmain(intargc,const......
  • C经典 二级指针
    用图说明事例代码#include<stdio.h>intmain(intargc,constchar*argv[]){//inta=5;int*p1=&a;//-打印地址-----地址相同---------------p......
  • C经典 一维数组指针解析
    #include<stdio.h>intmain(intargc,constchar*argv[]){//inta[]={1,2,3,4};int*pa[]={&a[0],&a[1],&a[2],&a[3]};printf("*pa[0]=%d\n",*pa......
  • 前端二面经典vue面试题总结
    Vue加载流程1.初始化的第一阶段是Vue实例也就是vm对象创建前后:首先Vue进行生命周期,事件初始化发生在beforeCreate生命周期函数前,然后进行数据监测和数据代理的初始化,也就......
  • 前端二面经典react面试题
    如何解决props层级过深的问题使用ContextAPI:提供一种组件之间的状态共享,而不必通过显式组件树逐层传递props;使用Redux等状态库。react实现一个全局的dialogimpo......
  • 区间插入,维护本质相同集合对数 (离线)
    有\(n\)个集合,\(m\)次操作,第\(i\)次操作选择一个区间\([l_i,r_i]\),在这些集合里插入\(i\),每次操作后查询本质相同集合对数。先用可持久化线段树来存每个集合。......