15分求助
查看原帖
15分求助
140621
_Bob_楼主2020/11/4 00:12
#include<bits/stdc++.h>
using namespace std;
//dp[i][j],j=1r ,j=0 w|min
//dp[1]=0;dp[0]=0;
//
int n,m,a[510],dp[510][3],p[510],d[510];
int main()
{
	cin>>n>>m;
	if(m==1||n==1)
	{
		cout<<0;
		return 0;
	}
	
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		for(int j=i-1;j>0;j--)
		{
			if(a[i]-a[j]>=m)
			{
			p[i]=j;
			break;
		}
		}
		int sum=0;
			for(int j=p[i]+1;j<=i;j++)
			{
				sum+=a[i]-a[j];
			}
		dp[i][0]=dp[i-1][0]+a[i]*d[i-1];
		d[i]=d[i-1]+1;
		dp[i][1]=sum+dp[p[i]][1];
		if(dp[i][1]<=dp[i][0])
			{
				d[i]=0;
				dp[i][0]=dp[i][1];
			}
	}
	cout<<dp[n][0];
	return 0;
}
2020/11/4 00:12
加载中...