提交时间:2024-08-30 12:35:52

运行 ID: 32007

#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=2e5+10; inline ll read(){ ll x=0;short t=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; }int n,c,a[maxn];ll dp[105],f[105],g[105]; ll s1[maxn],s2[maxn]; void slv(){ n=read(),c=read();up(i,1,n)a[i]=read(); up(i,1,n){ ll d=a[i]-a[i-1]; up(j,0,100){ if(j)f[j]=f[j-1];else f[j]=1e18; f[j]=min(f[j],dp[j]-c*1ll*j); }down(j,100,0){ if(j!=100)g[j]=g[j+1];else g[j]=1e18; g[j]=min(g[j],dp[j]+c*1ll*j); }memset(dp,0x3f,sizeof(dp)); up(j,0,100){ ll val=d+j,mx=1e18; if(val>=0)mx=min(mx,f[min(val,100ll)]+c*1ll*(d+j)); if(val<100)mx=min(mx,g[max(val,0ll)]-c*1ll*(d+j)); dp[j]=mx+j*j; } }ll mx=1e18; up(i,0,100)mx=min(mx,dp[i]); cout<<mx; }int main(){ //freopen("seq.in","r",stdin); //freopen("seq.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }