Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
36362 hi_hi 【S】T1 C++ 解答错误 0 137 MS 469048 KB 981 2025-02-11 16:05:46

Tests(0/10):


#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; }


测评信息: