题意:给定n个物品,每个物品有重量,从中选出m对,使得这m对物品重量差的平方和最小。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 2147483646
#define ll long long
#define N 10001
#define LL __int64
int dp[2001][1001];//前i个物品中选j对的最小和
int main()
{
int n,m;
int a[2001];
while(~scanf("%d%d",&n,&m))
{
int i,j,k;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
memset(dp,0,sizeof(dp));
for(i=2;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i==2*j)
dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);
else
dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]));
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}