洛谷评测返回 UKE
codefors 上显示的是 Idleness limit exceeded on test 8
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define re register
#define inf 0x3f3f3f3f3f3f3f3fll
#define LL long long
#define int LL
typedef pair<int,int> PII;
template<typename T>
inline void read(T &x){
re char ch=getchar();re bool f=false;x=0;
while(!isdigit(ch)){if(ch=='-'){f=true;}ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x=f?-x:x; return ;
}
template<typename T>
inline void write(T x){
if(x<0){putchar('-');x=-x;}
if(x>=10){write(x/10);}
putchar(x%10+'0');
}
double const eps=1e-18;
int const N=2e3+5;
int dp[N][N],n,a[N],num[N],minn[N],cnt;
inline void discretization(){
sort(num+1,num+n+1);
cnt=unique(num+1,num+n+1)-num-1;
for(int i=1;i<=n;i++) a[i]=lower_bound(num+1,num+cnt+1,a[i])-num;
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
read(n);
for(int i=1;i<=n;i++){
read(num[i]);
num[i]-=i;
a[i]=num[i];
}
discretization();
memset(dp,0x3f,sizeof dp);
minn[0]=inf;
for(int i=1;i<=n;i++){
for(int k=1;k<=cnt;k++){
dp[i][k]=minn[k]+abs(num[a[i]]-num[k]);
minn[k]=min(minn[k-1],dp[i][k]);
}
}
int ans=inf;
for(int i=1;i<=n;i++){
ans=min(ans,dp[n][i]);
}
write(ans),puts("");
return 0;
}