[NOIP2021] 方差
链接
鉴于
题目
[NOIP2021] 方差
题目描述
给定长度为
其中方差的定义为:数列中每个数与平均值的差的平方的平均值。更形式化地说,方差的定义为
输入格式
输入的第一行包含一个正整数
输入的第二行有
输出格式
输出仅一行,包含一个非负整数,表示你所求的方差的最小值的
样例 #1
样例输入 #1
4
1 2 4 6
样例输出 #1
52
提示
【样例解释 #1】
对于
对于
对于
对于
【数据范围】
测试点编号 | ||
---|---|---|
对于所有的数据,保证
历时一天半,共八届奥赛课加两节数学自习的努力,终于给他
题目一开始是没什么思路的,但入手点一定得在操作上找,然后就设一个
然后我就惊奇的发现,只模这个数是没什么作用的(因为我半个小时后什么也没得出来),然后就不看这个数了,开始
看俩数操作后的关系,就做了个差,然后。。就发现了一个惊奇的性质:操作一个数
那现在问题就转化成了找出一个
记
这就是我们答案的初始式子了,但我们不知道
我们发现这个
所以原式可化为
观察左边的式子发现,当中间部分的
( i ,j ) | i=2 | i=3 | i=4 | i=5 | i=6 |
---|---|---|---|---|---|
我们同时列一下其对应的系数
( i ,j ) | i=2 | i=3 | i=4 | i=5 | i=6 |
---|---|---|---|---|---|
我们惊奇的发现,对于右面的式子,也是当中间
所以我们就得到了:当
但我们又发现一个问题,我们只知道单谷排列,但并不知道“谷”在哪,所以我们就应该
考虑我们初始的式子
我们想让整体最小,就是想让
但两个变量明显不好求,所以我们钦定
这里我们的转移方程也出来了:
这里应该提前从小到大排个序
考虑新进来一个
- 1:如果放在序列右面:
- 2:如果放在序列左面:相当于之前填的序列整体右移
贡献为
最后加他本身的
点击查看代码
#include<bits/stdc++.h>
const int maxn=1e4+10;
using namespace std;
int n,a[maxn],x[maxn],f[2][500001],sum[maxn],top,s,ans;
int main()
{
// freopen("set1.in","r",stdin);
// freopen("T.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
x[i-1]=i>1?a[i]-a[i-1]:0;
// cout<<x[i-1]<<endl;
}
sort(x+1,x+n);
for(int i=1;i<n;i++) sum[i]=sum[i-1]+x[i];
memset(f,0x7f,sizeof f);
f[1][x[1]]=x[1]*x[1];
top=x[1];
int temp=0;
for(int i=1;i<n-1;i++)
{
temp^=1;
top+=x[i+1]*(i+1);
for(int j=0;j<=top;j++)
{
s=j+sum[i+1];
// cout<<i<<" "<<j<<" "<<f[i][j]<<endl;
// if(s>top) continue;
f[temp^1][s]=min(1ll*f[temp^1][s],f[temp][j]+1ll*sum[i+1]*sum[i+1]);
}
for(int j=0;j<=top;j++)
{
s=j+x[i+1]*(i+1);
// if(s>top) continue;
f[temp^1][s]=min(1ll*f[temp^1][s],f[temp][j]+1ll*x[i+1]*x[i+1]*(i+1)+2ll*j*x[i+1]);
}
memset(f[temp],0x7f,sizeof f[temp]);
}
ans=0x7f7f7f7f;
for(int i=0;i<=top;i++)
// cout<<f[(n-1)&1][i]<<endl;
ans=min(1ll*ans,1ll*n*f[(n-1)&1][i]-1ll*i*i);
cout<<ans<<'\n';
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】