using namespace std;
typedef long long ll;
const ll N=505,K=4e6+8;
ll t[N],cnt[K],sC[K],sT[K],dp[K],d[N],n,m;
void DPopt(){
ll GAP=2*m;
for(ll i = 2;i <= n;i++){
if(t[i]-t[i-1]>GAP){
d[i]=GAP;
}
else d[i]=t[i]-t[i-1];
}
for(ll i = 2;i <= n;i++){
t[i]=t[i-1]+d[i];
}
}
int main(){
memset(dp,0x3f,sizeof(dp));
cin>>n>>m;
for(ll i = 1;i <= n;i++){
cin>>t[i];
}
sort(t+1,t+n+1);
DPopt();
ll k=t[n]+m;
for(ll i = 1;i <= n;i++)cnt[t[i]]++;
for(ll i = 0;i <= k;i++){
sC[i]=sC[i-1]+cnt[i];
sT[i]=sT[i-1]+cnt[i]*i;
}
dp[0]=0;
for(ll i = 0;i <= k;i++){
ll l=max(0ll,i-2*m),r=max(0ll,i-m);
for(ll p = l;p <= r;p++){
dp[i]=min(dp[i],dp[p]+i*(sC[i]-sC[p])-(sT[i]-sT[p]));
}
}
cout<<*min_element(dp+t[n],dp+k+1);
return 0;
}
WA 65pts,整了2hrs。
我看到这篇帖子,,但改完后还是65pts
求dalao debug