关于此题UKE
查看原帖
关于此题UKE
372279
blamer楼主2021/7/25 21:44

洛谷评测返回 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;
}
2021/7/25 21:44
加载中...