比赛 round 1『缺混麻酱伞鹊役』 评测结果 AAAAAAAAAAAAAAAAEEEE
题目名称 HS 的 Eula 最终得分 80
用户昵称 flyfree 运行时间 1.612 s
代码语言 C++ 内存使用 3.41 MiB
提交时间 2024-11-21 09:36:35
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
ll dp[110][110][1010];
ll pre[110],sum[110];
ll n,m,beg,begl,begr,ans;
//bool cmp(ll a,ll b){
//	return a>b;
//}
int main(){
	freopen("Eulalover.in","r",stdin);
	freopen("Eulalover.out","w",stdout);
	n=read(),m=read();
	for(int i=1;i<=n;i++)pre[i]=read();
	sort(pre+1,pre+1+n);
	beg=-pre[1];
	begl=0,begr=n+1;
	if(pre[1]<0)begl=1;
	for(ll i=2;i<=n;i++){
		sum[i]=pre[i]-pre[1];
		if(pre[i]<0)begl=max(begl,i);
		else begr=min(begr,i);
//		cout<<sum[i]<<" ";
	}
//	cout<<endl;
//	cout<<begl<<" "<<begr<<endl;
	if(begl)dp[1][begl][beg-sum[begl]]=max(0ll,m-beg+sum[begl]);
	if(begr<=n)dp[1][begr][sum[begr]-beg]=max(0ll,m-sum[begr]+beg);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int t=1;t<=m;t++){
				if(!dp[i][j][t])continue;
				ans=max(ans,dp[i][j][t]);
//				cout<<i<<" "<<j<<" "<<t<<" "<<dp[i][j][t]<<endl;
				if(j<=begl){
					if(j-1&&t+sum[j]-sum[j-1]<m){
						dp[i+1][j-1][t+sum[j]-sum[j-1]]=max(dp[i+1][j-1][t+sum[j]-sum[j-1]],dp[i][j][t]+m-t-sum[j]+sum[j-1]);
					}
					if(j+i<=n&&t+sum[j+i]-sum[j]<m){
						dp[i+1][j+i][t+sum[j+i]-sum[j]]=max(dp[i+1][j+i][t+sum[j+i]-sum[j]],dp[i][j][t]+m-t-sum[j+i]+sum[j]);
					}
				}else{
					if(j+1<=n&&t+sum[j+1]-sum[j]<m){
						dp[i+1][j+1][t+sum[j+1]-sum[j]]=max(dp[i+1][j+1][t+sum[j+1]-sum[j]],dp[i][j][t]+m-t-sum[j+1]+sum[j]);
					}
					if(j-i&&t+sum[j]-sum[j-i]<m){
						dp[i+1][j-i][t+sum[j]-sum[j-i]]=max(dp[i+1][j-i][t+sum[j]-sum[j-i]],dp[i][j][t]+m-t-sum[j]+sum[j-i]);
					}
				}
			}
		}
	}
	cout<<ans;
	return 0;
}