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;
}
状态转移方程: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;
}
相关文章推荐
- hdu 1412 搬寝室 (很好的一道dp题)
- HDU 1412 搬寝室 DP
- hdu 1421 搬寝室--类背包问题
- D题 hdu 1412 {A} + {B}
- HDU 1412 {A} + {B} set练习
- hdu 1421 搬寝室 DP
- hdu 1421 搬寝室 (DP)
- hdu_1421 搬寝室
- HDU 1421 搬寝室
- hdu 1421 搬寝室
- [HDU] 1421 搬寝室 - 要贪心初始化 需要一点时间去磕
- 需要重点回顾:hdu 1421 搬寝室
- HDU 1421搬寝室
- HDU 1421-搬寝室
- hdu 1412 {A} + {B}
- Hdu 1421 搬寝室 dp
- hdu 1421 搬寝室(DP)
- HDU 1421 搬寝室
- HDU 1421 搬寝室(DP)
- hdu 1421 搬寝室(dp)