Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
36361 | hi_hi | 【S】T2 | C++ | 解答错误 | 0 | 143 MS | 469028 KB | 981 | 2025-02-11 16:05:37 |
#include<bits/stdc++.h> using namespace std; long long n,a[100005],d[100005],nmin=0x3f3f3f3f3f3f3f3f,dp[60000005],sum[100005],nmax; int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); nmax=max(nmax,a[i]); } for(int i=1;i<n;i++){ d[i]=a[i+1]-a[i]; } sort(d+1,d+n); memset(dp,0x3f,sizeof(dp)); dp[0]=0; for(long long i=1;i<n;i++){ sum[i]=sum[i-1]+d[i]; if(d[i]==0)continue; for(long long x=nmax;x>=0;x--){ if(dp[x]==0x3f3f3f3f3f3f3f3f)continue; dp[x+sum[i]]=min(dp[x+sum[i]],dp[x]+sum[i]*sum[i]); dp[x+d[i]*i]=min(dp[x+d[i]*i],dp[x]+i*d[i]*d[i]+2*x*d[i]); nmax=max(nmax,max(x+sum[i],x+d[i]*i)); dp[x]=0x3f3f3f3f3f3f3f3f; } } for(long long i=0;i<=nmax;i++){ if(dp[i]!=0x3f3f3f3f3f3f3f3f)nmin=min(nmin,dp[i]*n-i*i); } printf("%lld",nmin); return 0; }