您的位置:首页 > 其它

hdu1412 搬寝室

2013-08-12 21:56 351 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421

状态转移方程:dp[i][j]=Min(dp[i-1][j],dp[i-2][j-1]+temp*temp);temp=w[i]-w[i-1];

//dp[i][j]表示前i个物品中选j对的最小疲劳度
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INF 99999999
#define MAXN 2002

int dp[MAXN][1002];

int cmp(const void *x,const void *y)
{
return *(int *)x-*(int *)y;
}

int Min(int x,int y)
{
return x<y?x:y;
}

int main()
{
int n,k,i,j,temp;
int w[MAXN];
while(scanf("%d %d",&n,&k)!=EOF)
{
w[0]=0;
dp[0][0]=0;
for(i=1;i<=n;++i)
scanf("%d",&w[i]);
qsort(w+1,n,sizeof(w[1]),cmp);
for(i=0;i<=n;++i)
{
for(j=1;j<=k;++j)
dp[i][j]=INF;
}
for(i=2;i<=n;++i)
{
for(j=1;j*2<=i;++j)
{
temp=w[i]-w[i-1];
dp[i][j]=Min(dp[i-1][j],dp[i-2][j-1]+temp*temp);
}
}
printf("%d\n",dp
[k]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: