#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<bitset>
#include<set>
#include<map>
using namespace std;
int n,m,t[505],dp[10005][10005],ans,zd;//dp[i][j]表示第i个人所在的公交车第j分钟出发使前i个人的等待时间的最小值
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>t[i];
}
sort(t+1,t+1+n);
memset(dp,150,sizeof(dp));
zd=t[n];
for(int i=t[1];i<=zd+m;i++)
{
dp[1][i]=i-t[1];
}
for(int i=2;i<=n;i++)
{
for(int j=t[i];j<=zd+m;j++)
{
dp[i][j]=min(dp[i][j],dp[i-1][j]+j-t[i]);
}
for(int j=t[i];j<=zd+m;j++)
{
for(int k=t[i-1];k<=j-m;k++)
{
dp[i][j]=min(dp[i][j],dp[i-1][k]+j-t[i]);
}
}
}
int ans=0x7fffffff;
for(int i=n;i<=zd+m;i++)
{
ans=min(ans,dp[n][i]);
}
cout<<ans;
return 0;
}
第一个样例输出了一个负数