正题

题目链接:https://www.luogu.com.cn/problem/P7962


题目大意

给出一个长度为nnn的序列aaa,你每次可以让一个ai(1<i<n)=ai−1+ai+1−aia_i(1<i<n)=a_{i-1}+a_{i+1}-a_iai​(1<i<n)=ai−1​+ai+1​−ai​,求能变出的最小方差。

1≤n≤400,1≤ai≤6001\leq n\leq 400,1\leq a_i\leq 6001≤n≤400,1≤ai​≤600或1≤n≤104,1≤ai≤501\leq n\leq 10^4,1\leq a_i\leq 501≤n≤104,1≤ai​≤50


解题思路

民间数据过了就当过了吧

这个式子显然我们可以差分之后变成交换相邻的数,让所有的数都减去a1a_1a1​这样方差不变并且第一个保证为000,然后我们记差分数组bi=ai+1−aib_i=a_{i+1}-a_ibi​=ai+1​−ai​,那么化一下答案的式子就是
n∑i=1nai2−(∑i=1nai)2⇒n∑i=1n−1(∑j=1ibj)2−(∑i=1n−1bi(n−i))2n\sum_{i=1}^na_i^2-\left(\sum_{i=1}^na_i\right)^2\Rightarrow n\sum_{i=1}^{n-1}\left(\sum_{j=1}^{i}b_j\right)^2-\left(\sum_{i=1}^{n-1}b_i(n-i)\right)^2ni=1∑n​ai2​−(i=1∑n​ai​)2⇒ni=1∑n−1​(j=1∑i​bj​)2−(i=1∑n−1​bi​(n−i))2

这个式子乍一眼我们看不出什么,但是我们可以得到每个bib_ibi​对之间乘积的权重记为fi,jf_{i,j}fi,j​,会发现fi,jf_{i,j}fi,j​是按照i/ji/ji/j相互之间越接近/越接近中间而递增的,但是依然会出现一些边边的靠近数对的情况比中间的不那么靠近数对的权重要高。

一个直观的想法是类似于一个山谷之类的填法,打几个表之后不难发现确实是从一个点往两边递增的规律。

考虑在此基础上进行dpdpdp,考虑在一个填好的序列的前面/后面加上一个数字会产生的变化,记ansansans为原来的答案,记LLL为题目中给出的nnn(因为目前我们还没有放完nnn个数字,所以此时的nnn不一样),xxx为插入的数组。

  • 插在前面:
    L∑i=1n−1(∑j=1ibj+x)2−(nx+∑i=1n−1bi(n−i))2L\sum_{i=1}^{n-1}\left(\sum_{j=1}^{i}b_j+x\right)^2-\left(nx+\sum_{i=1}^{n-1}b_i(n-i)\right)^2Li=1∑n−1​(j=1∑i​bj​+x)2−(nx+i=1∑n−1​bi​(n−i))2
    ⇒ans+Lnx2+2Lx∑i=1n−1bj−2nx∑i=1n−1bi(n−i)−n2x2\Rightarrow ans+Lnx^2+2Lx\sum_{i=1}^{n-1}b_j-2nx\sum_{i=1}^{n-1}b_i(n-i)-n^2x^2⇒ans+Lnx2+2Lxi=1∑n−1​bj​−2nxi=1∑n−1​bi​(n−i)−n2x2
  • 插在后面:
    L(∑i=1n−1(∑j=1ibj)2+(x+∑i=1n−1bi)2)−(x+∑i=1n−1bi+∑i=1n−1bi(n−i))2L\left(\sum_{i=1}^{n-1}\left(\sum_{j=1}^{i}b_j\right)^2+\left(x+\sum_{i=1}^{n-1}b_i\right)^2\right)-\left(x+\sum_{i=1}^{n-1}b_i+\sum_{i=1}^{n-1}b_i(n-i)\right)^2L⎝⎛​i=1∑n−1​(j=1∑i​bj​)2+(x+i=1∑n−1​bi​)2⎠⎞​−(x+i=1∑n−1​bi​+i=1∑n−1​bi​(n−i))2
    ⇒ans+L(x+∑i=1n−1bi)2−(x+∑i=1n−1bi)2−2(x+∑i=1n−1bi)(∑i=1n−1bi(n−i))\Rightarrow ans+L\left(x+\sum_{i=1}^{n-1}b_i\right)^2-\left(x+\sum_{i=1}^{n-1}b_i\right)^2-2\left(x+\sum_{i=1}^{n-1}b_i\right)\left(\sum_{i=1}^{n-1}b_i(n-i)\right)⇒ans+L(x+i=1∑n−1​bi​)2−(x+i=1∑n−1​bi​)2−2(x+i=1∑n−1​bi​)(i=1∑n−1​bi​(n−i))

然后会发现我们很难知道∑i=1n−1bi(n−i)\sum_{i=1}^{n-1}b_i(n-i)∑i=1n−1​bi​(n−i)这个东西,所以考虑放进dpdpdp数组里面维护,但是如果丢进去维护了后面那个东西就完全没有必要了,所以可以删掉很多复杂的部分。

那么设fi,jf_{i,j}fi,j​表示目前填了iii个∑i=1n−1bi(n−i)=j\sum_{i=1}^{n-1}b_i(n-i)=j∑i=1n−1​bi​(n−i)=j时的最小方差,然后就可以O(1)O(1)O(1)转移了。

这样的时间复杂度是O(n2ai)O(n^2a_i)O(n2ai​)的,可以拿到888888分,我在考场上就止步于此了。

现在来分析一下最后一个点ai≤50a_i\leq 50ai​≤50的性质,也就是说差分数组里面最多只有505050个数是有值的,所以有一堆000,直接动态更新dpdpdp枚举的上界就过了。
时间复杂度:O(naimin⁡{ai,n})O(na_i\min\{a_i,n\})O(nai​min{ai​,n})

好不容易那么接近一次正解,你却让我输的那么彻底,焯!\color{white}好不容易那么接近一次正解,你却让我输的那么彻底,焯!好不容易那么接近一次正解,你却让我输的那么彻底,焯!


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5e5+10,inf=1e18;
ll n,L,a[N],s[N],f[2][N],ans;
signed main()
{scanf("%lld",&n);if(n==1)return puts("0");for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);L=n*a[n];ans=inf;for(ll i=1;i<n;i++)a[i]=a[i+1]-a[i];n--;sort(a+1,a+1+n);L=a[1];for(ll i=1;i<=n;i++)s[i]=s[i-1]+a[i];for(ll i=0;i<=L;i++)f[1][i]=inf;f[1][a[1]]=a[1]*a[1];for(ll k=2;k<=n;k++){int R=s[k]*k;for(ll i=0;i<=R;i++)f[k&1][i]=inf;for(ll i=0;i<=L;i++){if(f[~k&1][i]!=inf){f[k&1][i+a[k]*k]=min(f[k&1][i+a[k]*k],f[~k&1][i]+k*a[k]*a[k]+2ll*i*a[k]);f[k&1][i+s[k]]=min(f[k&1][i+s[k]],f[~k&1][i]+s[k]*s[k]);}}L=R;}for(ll i=0;i<=L;i++)if(f[n&1][i]!=inf)ans=min(ans,f[n&1][i]*(n+1)-i*i);printf("%lld\n",ans);return 0;
}
/*
10
6 19 34 35 56 63 82 82 83 99
*/

P7962-[NOIP2021]方差【dp,差分】相关推荐

  1. 「CEOI2019」魔法树(DP+差分启发式合并)

    「CEOI2019」魔法树 description solution 设dpi,j:idp_{i,j}:idpi,j​:i子树在jjj时刻的最大果汁量,显然dpi,jdp_{i,j}dpi,j​在jj ...

  2. 2019.08.12【NOIP提高组】模拟 B 组 模拟+DP+差分约束、spfa

    文章目录 0 少女觉 1 灵知的太阳信仰 2 多段线性函数 3 DY引擎 差分约束系统 我很喜欢你,我会一直喜欢你到你不再需要我喜欢你为止.--顾飞 0 少女觉 在幽暗的地灵殿中,居住着一位少女,名为 ...

  3. 【BZOJ-4422】Cow Confinement 线段树 + 扫描线 + 差分 (优化DP)

    4422: [Cerc2015]Cow Confinement Time Limit: 50 Sec  Memory Limit: 512 MB Submit: 61  Solved: 26 [Sub ...

  4. Federated Learning in Mobile Edge Networks: AComprehensive Survey(翻译)

    名词:联邦学习(FL).ML.MEC BAA(宽带模拟聚合).CNN(卷积神经网络).CV(计算机视觉). DDQN(双深度Q网络).DL(深度学习)DNN(深度神经网络). DP(差分隐私).DQL ...

  5. 【正点原子FPGA连载】 第三章 硬件资源详解 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  6. 陌生单词-专业英语代码编码符号2

    ips:每秒处理的图片数量 End-to-end evaluation on the validation set with TEDS as the indicator. TLD: text line ...

  7. P3084 [USACO13OPEN]照片Photo

    单调队列DP/差分约束 差分约束会TLE 讲解在这里 #include<bits/stdc++.h> using namespace std;#define go(i,a,b) for(i ...

  8. NVIDIA Jetson TX1(4)

    3.0 接口和信号描述 3.1 SD/eMMC控制器 标准 注释 SD规范Part A2 SD Host控制器标准规范V4.00 SD规范Part 1 物理层规范V4.00 SD规范Part E1 S ...

  9. 【Paper Reading】Privacy-Preserving Aggregation in Federated Learning: A Survey

    Privacy-Preserving Aggregation in Federated Learning: A Survey 原文来源:[Arxiv2022] Privacy-Preserving A ...

最新文章

  1. Unrecognised tag: #39;encoding#39; (position: START_TAG seen ...lt;/versiongt;\r\n\t\t\t\tlt;en...
  2. 学用 ASP.Net 之 字符串 (2): string.Format
  3. python布尔测试对象_面试题十九期-测试开发面试题之python系列-这个中~
  4. PHP获取今天, 本周 ,半月 ,本月 ,本季 ,本年,昨天 ,上月时间段
  5. 我和我的广告前端代码(六):webpack工程合并、也许我不需要gulp
  6. RabbitMQ 如何保证消息的可靠性
  7. 一辆汽车让你搞懂springmvc项目结构
  8. zabbix 5.0所有依赖包_一杯茶的时间,上手Zabbix
  9. kmp 学习【字符串-kmp学习】
  10. J2EE MVC模式框架中,表单数据绑定功能不安全实现在Tomcat下造成的DoS及RCE
  11. 公司如何实施 EDI 项目?
  12. 网页测试网速软件,网页测网速在线测试(speedtest软件测速原理)
  13. C语言数据结构之一元多项式的求导
  14. java 参数命名规则_Java命名规范
  15. 下载加速小妙招,我不允许你不知道
  16. 深度学习在训练时对图片随机剪裁(random crop)
  17. 【爱课程-精品通选系列课程】哲学智慧与人文思想
  18. java_servlet字符过滤器filter
  19. 简洁的 React 状态管理库 - Stamen
  20. 【c++图论】【口袋的天空】【部落划分】

热门文章

  1. 如何用matlab消除谐波,如何在含有整次谐波和非整次谐波的信号中去除整次谐波?...
  2. vscode函数跳转插件_人生苦短,我们为 Cocos Creator 开发的插件和工具
  3. docker 修改阿里镜像源_Jetson Nano 修改源镜像
  4. android canvas_Android 如何实现气泡选择动画
  5. linux中人脸识别不了,虹软人脸识别在 linux中so文件加载不到的问题
  6. 小米8对一加6打开软件速度测试,买一加6还是小米8?小米8和一加6区别对比
  7. 中止是怎么用的_多士炉怎么用 使用多士炉注意事项
  8. linux命令查询邮件发送状态,Linux发邮件之mail命令详解
  9. 后端根据百度地图真实路径距离_导航软件哪家强?实测百度地图and高德地图哪个更靠谱...
  10. android消息响应实验报告,android实验一实验报告-20210401011015.docx-原创力文档