提交时间:2024-08-30 12:41:14
运行 ID: 32014
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}x=c-'0';c=getchar();while(c<='9'&&c>='0'){x*=10;x+=c-'0';c=getchar();}return x*f;} const int MAXN=100010,N=110,inf=1000000000; int n,m,c,f[MAXN][N],a[MAXN],ans; void slv(){ n=read(),c=read(); for(int i=1;i<=n;i++)a[i]=read(),m=max(m,a[i]); for(int i=1;i<=n;i++){ int cnt=inf; for(int j=1;j<=m;j++){ cnt=min(f[i-1][j]-j*c,cnt); if(j>=a[i])f[i][j]=cnt+j*c+(j-a[i])*(j-a[i]); else f[i][j]=inf; } cnt=inf; for(int j=m;j>=1;j--){ cnt=min(cnt,f[i-1][j]+j*c); if(j>=a[i])f[i][j]=min(f[i][j],cnt-j*c+(j-a[i])*(j-a[i])); else f[i][j]=inf; } } ans=inf; for(int i=a[n];i<=m;i++)ans=min(ans,f[n][i]); printf("%lld",ans); } signed main(){ slv(); fclose(stdin);fclose(stdout); return 0; }