比赛 |
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;
}
}