比赛 |
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;
}