rt,教练讲的时候没说,感觉和题解不太一样。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=510,INF=0x3f3f3f3f;
int t1[N],t2[N],dp[100210],c[100210];
int main() {
int n,m; scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&t1[i]);
sort(t1+1,t1+n+1),t2[1]=m;
for(int i=2;i<=n;i++) t2[i]=t2[i-1]+min(t1[i]-t1[i-1],m*2);
for(int i=1;i<=n;i++) c[t2[i]]++;
for(int i=t2[n]-1;i>=0;i--) {
dp[i]=INF;
for(int j=1,t3=0,sum=0;j<m*2;j++) {
if(j>=m) dp[i]=min(dp[i],t3+dp[i+j]);
sum+=c[i+j],t3+=sum;
}
}
return printf("%d",dp[0]),0;
}