DP专练3:征途

虽然只有1道题,但是含金量还是够够di

文章目录

  • 题目
  • 题解
  • 代码实现

题目

在这里插入图片描述

在这里插入图片描述

题解

我们直接对答案输出格式进行处理:设第 iii 天走的路程为 aia_iai,总路程为 S=∑i=1nleniS=\sum_{i=1}^nlen_iS=i=1nleni,那么 v=∑i=1m(ai−Sm)2mv=∑_{i=1}^m\frac{(a_i-\frac{S}{m})^2}{m}v=i=1mm(aimS)2

因为输出要乘以m2m^2m2,就变成了 ∑i=1m(ai−Sm)2∗m∑_{i=1}^m(a_i-\frac{S}{m})^2*mi=1m(aimS)2m

将求和 sigmasigmasigma 拆开,得到 m∗(∑i=1mai−∑i=1m2∗ai∗Sm+∑i=1mS2m2)m*\Big(∑_{i=1}^ma_i-\frac{∑_{i=1}^m2*a_i*S}{m}+∑_{i=1}^m\frac{S^2}{m^2}\Big)m(i=1maimi=1m2aiS+i=1mm2S2)

再把 mmm 丢进去,成为 m∗∑i=1mai−∑i=1m2∗ai∗S+∑i=1mS2mm*∑_{i=1}^ma_i-∑_{i=1}^m2*a_i*S+∑_{i=1}^m\frac{S^2}{m}mi=1maii=1m2aiS+i=1mmS2

上述式子就变了:m∗∑i=1mai−2∗S∗S+m∗S2mm*∑_{i=1}^ma_i-2*S*S+m*\frac{S^2}{m}mi=1mai2SS+mmS2

化简得,需要我们求 m∗∑i=1mai2−S2m*∑_{i=1}^ma_i^2-S^2mi=1mai2S2

因为 mmmSSS 都是已知的,要求出最小答案,即需要我们求得 ∑i=1mai2∑_{i=1}^ma_i^2i=1mai2 最小即可

我们要使得这个和最小,可以设 dp[j][i]dp[j][i]dp[j][i] 表示 j 天走了 i 段路的最优方案

则有,dp[j][i]=min⁡{dp[j−1][k]+(s[i]−s[k])2}(k∈[1,i−1]dp[j][i]=\min\Big\{dp[j-1][k]+(s[i]-s[k])^2\Big\}(k∈[1,i-1]dp[j][i]=min{dp[j1][k]+(s[i]s[k])2}(k[1i1],其中 sis_isi 表示前 iii 段路的前缀和。

这样,我们就可以直接对答案进行 DPDPDP,时间复杂度为 O(nm2)O(nm^2)O(nm2)

但是很显然,这样是不能把分拿满的。考虑优化。

对于这个式子,很显然,它的第一维是可以滚动的:我们设 g(i)=dp[j−1][i]g(i)=dp[j-1][i]g(i)=dp[j1][i]

对于 iiiaaaiiibbb 两个点,若 aaabbb 优,则

g(a)+(si−sa)2<g(b)+(si−sb)2g(a)+(s_i-s_a)^2 < g(b)+(s_i-s_b)^2g(a)+(sisa)2<g(b)+(sisb)2

⇒g(a)+sa2−2∗si∗sa<g(b)+sb2−2∗si∗sb\Rightarrow g(a)+s_a^2-2*s_i*s_a < g(b)+s_b^2-2*s_i*s_bg(a)+sa22sisa<g(b)+sb22sisb

⇒(g(a)+sa2)−(g(b)+sb2)sa−sb<2∗si\Rightarrow \frac{(g(a)+s_a^2)-(g(b)+s_b^2)}{s_a-s_b}<2*s_isasb(g(a)+sa2)(g(b)+sb2)<2si 【这一步成立的前提是因为 sss 是单调的】

可以发现,左边是一个斜率式子。

斜率优化 dpdpdp 即可。

代码实现

#include <cstdio>
#include <cstring>
#define MAXN 3005
int n, m, len;
int dp[MAXN][MAXN];
int s[MAXN], deq[MAXN * MAXN];int Find_y ( int u, int v, int j ) {int first = dp[j - 1][u] + s[u] * s[u];int second = dp[j - 1][v] + s[v] * s[v];return first - second;
}
int Find_x ( int u, int v ) {return s[u] - s[v];
}int main() {scanf ( "%d %d", &n, &m );for ( int i = 1;i <= n;i ++ ) {scanf ( "%d", &len );s[i] = s[i - 1] + len;}for ( int i = 1;i <= n;i ++ )dp[1][i] = s[i] * s[i];for ( int j = 2;j <= m;j ++ ) {int head = 1, tail = 0;for ( int i = 1;i <= n;i ++ ) {while ( head < tail && Find_y ( deq[head], deq[head + 1], j ) > 2 * s[i] * Find_x ( deq[head], deq[head + 1] ) )head ++;dp[j][i] = dp[j - 1][deq[head]] + s[i] * s[i] - 2 * s[i] * s[deq[head]] + s[deq[head]] * s[deq[head]];while ( head < tail && Find_y ( deq[tail], deq[tail - 1], j ) * Find_x ( i, deq[tail] ) > Find_y ( i, deq[tail], j ) * Find_x ( deq[tail], deq[tail - 1] ) )tail --;deq[++ tail] = i;}}printf ( "%d", m * dp[m][n] - s[n] * s[n] );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云时代的.NET

编程语言从最初的0101机器码到汇编语言再到面向对象的编程&#xff0c;不断的发展&#xff0c;整个发展趋势呈现高内聚、低耦合、可重用、可理解的特点。最早编程是用机器码&#xff0c;人的大脑不像电脑&#xff0c;无法处理0101&#xff1b;后来汇编语言还是太费解&#xff0…

研究性学习:APP的隐私问题

文章目录写在前面背景&#xff08;problem&#xff09;一个实例(example)手机App用户输入隐私数据的识别与检测技术研究&#xff08;solution&#xff1f;&#xff09;&#xff08;官方&#xff09;概览背景介绍4.系统设计隐私政策引言1.收集信息2. 信息使用3. 信息披露4. 信息…

DP专练4:[SCOI 2010]股票交易(单调队列优化dp)

昨天晚上&#xff0c;初见它时&#xff0c;月黑风高&#xff0c;一个电脑&#xff0c;一支笔&#xff0c;一个人 今天秋高气爽&#xff0c;再一瞥&#xff0c;回眸间 我又来了&#xff0c;honey题目题解代码实现题目 题解 首先这种 iii 天与前面 jjj 天有关联&#xff0c;而…

【做题记录】[NOIP2016 普及组] 魔法阵

P2119 魔法阵 2016年普及组T4 题意&#xff1a; 给定一系列元素 \(\{X_i\}\) &#xff0c;求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 。 \[\begin{cases}X_a<X_b<X_c<X_d \\ X_a-X_b2\times (X_d-X_c) \\X_b-X_a<\dfrac{X_c-X_b}{3}\end{cases} \]…

“被狗啃”的按钮引发的开源社区信任危机

昨天&#xff0c;在国外民众还在欢度圣诞期间&#xff0c;开发者社区却对 Antd 开发团队发起了连番的炮轰。一觉醒来&#xff0c;他们发现由自己参与设计的、公司内网、办事系统等网页上&#xff0c;有一些按钮的上面多了一团白色的“积雪”&#xff0c;在白背景下&#xff0c;…

[COCI2017-2018#5] Pictionary(并查集+dfs)

贼ex的一道&#xff0c;卡了本仙女整整7个小时orz 思路容易理解&#xff0c;but码力very重要orz 我愿意花五毛钱提升我的码力&#xff0c;换个脑子也行&#xff0c;不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知的地方&#xff0c;有一个星球&#xff0c;上面…

Docker最全教程——从理论到实战(九)

在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中…

[2019CSP多校联赛普及组第五周] 调度CPU (贪心)

来来来&#xff0c;走过路过不要错过题目题解代码实现1代码实现2题目 ⼩Y同学有⼀块超级CPU&#xff0c;它有两个超级核⼼A和B。 A核⼼可以同时处理多项任务&#xff0c;每项任务处理时间为x&#xff0c;B核⼼只能同时处理⼀项任务&#xff0c;每项任务处理时间为y。 这⼀天…

NumSharp v0.6.1 科学计算库发布,支持标量和隐式转换

NumSharp&#xff08;Numerical .NET&#xff09;可以说是C&#xff03;中的科学计算库。 它是用C&#xff03;编写的&#xff0c;符合.netstandard 2.0库标准。 它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码&#xff0c;从而最大限度地借鉴现有大量在python代码的…

[Luogu2279][HNOI2003] 消防局的设立

文章目录题目法一&#xff1a;树上DP思路代码实现法二&#xff1a;贪心 搜索思路代码实现题目 2020年&#xff0c;人类在火星上建立了一个庞大的基地群&#xff0c;总共有n个基地。起初为了节约材料&#xff0c;人类只修建了n-1条道路来连接这些基地&#xff0c;并且每两个基…

dnSpy 强大的.Net反编译软件

一说起.net的反编译软件&#xff0c;大家首先想到的就是Reflector&#xff0c;ILSpy&#xff0c;dotPeek等等。而dnSpy同样是一款优秀的反编译软件&#xff0c;同时它是开源免费的。官方的描述是: dnSpy是一个调试器和.NET组件编辑器。 即使您没有任何可用的源代码&#xff0c;…

小奇探险

文章目录题目题解代码实现题目 小奇去遗迹探险&#xff0c;遗迹里有N个宝箱&#xff0c;有的装满了珠宝&#xff0c;有的装着废品。 小奇有地图&#xff0c;所以它知道每一个宝箱的价值&#xff0c;但是它不喜欢走回头路&#xff0c;所以要按顺序拿这N个宝箱中的若干个。 拿宝…

基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller&#xff0c;那么是否在该程序中&#xff0c;服务都按照Asp.Net Core 中的Web Api的方式…

[NOIP 2009 提高组]最优贸易

勤劳的一更题目题解代码实现题目 C国有 n个大城市和 m 条道路&#xff0c;每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的道路在统计条数…

Azure Service Fabric Mesh:一个构建任务关键型微服务的平台

本文要点Azure Service Fabric Mesh&#xff08;目前处于预览阶段&#xff09;是一个完全托管的服务&#xff0c;它使你可以使用“无服务器”方法构建、部署和管理由运行在容器中的多语言服务组成的应用程序。Azure Service Fabric Mesh 通过使用 Envoy Proxy 构建的软件定义网…

P3265 [JLOI2015]装备购买

题目描述&#xff1a; 给N个整数向量&#xff0c;每个向量带权值&#xff0c;求权值和最小的线性基 题解&#xff1a; 按权值v从小->大排序&#xff0c;依次插入线性基。整数线性基的思想类似&#xff0c;只是此时“消去”不能直接xor完成&#xff0c;需要类似高斯消元一样…

Surging1.0发布在即,.NET开发者们,你们还在等什么?

开源&#xff0c;是近三十年来互联网经久不衰的话题。它不仅仅是一种技术分享的形态&#xff0c;更是一种开放&#xff0c;包容&#xff0c;互利共赢的互联网精神。 不到30年前&#xff0c;大神林纳德托瓦兹&#xff0c;在赫尔辛基大学实验室里&#xff0c;开发出了第一个版本的…

[SDOI2016]排列计数 (错排数概念 + 递推公式【附带证明】)

辛勤二更题目题解错排数概念错排数递推公式及其证明代码实现这种题做的时候&#xff1a; 做完后&#xff1a;正常这就是生活&#xff0c;我们要学会习惯 题目 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a; 1 ~ n 这 n 个数在序列中各出现了一次 若第 i …

失配树(border树)

4和6没有border关系 举例子&#xff1a; 当i 3时&#xff0c;j fa[i-1] fa[2] 0 s[j1] s[1] a s[3] 所以把i 3点的父亲设为j1 1 P5829 [模板]失配树

魔方俱乐部

爆肝感动三更题目思路90分代码&#xff08;MLE&#xff09;题解代码实现题目 fateice 来到了魔方俱乐部旅行。 魔方俱乐部有N个分部&#xff0c;每个分部均有且仅有一个虫洞&#xff0c;但是这虫洞只能通往一个分部。 每个分部有一个 orzFang 价值&#xff0c;第i个分部的 or…