比赛 20161114 评测结果 AWWAAWAATT
题目名称 社长的qwa 最终得分 50
用户昵称 残星誓言 运行时间 3.499 s
代码语言 C++ 内存使用 191.45 MiB
提交时间 2016-11-14 11:54:05
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=5005;
int n,k;
int X[maxn];
long long dp[maxn][maxn];
int main()
{
	
	freopen("qwa.in","r",stdin);
	freopen("qwa.out","w",stdout);
	scanf("%d%d",&n,&k);
	memset(dp,0,sizeof(dp));
	if(k<=1) printf("0"); 
	for(int i=1;i<=n;i++)
		{
			int tp;
			scanf("%d",&tp);
			X[i]=tp+1073741824;
		}
	sort(X+1,X+1+n);
	for(int i=1;i<=n;i++) 
	dp[i-1][2]=X[i]-X[i-1];
	if(!(k&1))
	{
		for(int j=4;j<=k;j+=2)
		for(int i=1;i<=n;i++)
		{
			if(n-i+1<j) break;
			dp[i][j]= dp[i+1][j-2]+(long long)(j-1)*(X[i+j-1]-X[i]);
		}
		long long ans=100000*2147483647LL;
		for(int i=1;i<=n;i++)
		{
				if(dp[i][k]!=0&&dp[i][k]<ans)
				ans=dp[i][k];
		}
		cout<<ans<<endl;
	}
	if((k&1))
	{
		
		for(int j=3;j<=k;j+=2)
			{
				for(int i=1;i<=n;i++)
				{
					if(n-i+1<j) break;
					dp[i][j]=dp[i+1][j-2]+(long long)(j-1)*(X[i+j-1]-X[i]);
				
				}
			}
		long long ans=100000*2147483647LL;
		for(int i=1;i<=n;i++)
		{	
			if(dp[i][k]!=0&&dp[i][k]<ans)
			ans=dp[i][k];
		}
		cout<<ans<<endl;
	}
	
		
}