HDU 1421 搬寝室 (DP)

来源:互联网 发布:宠物用品软件 编辑:程序博客网 时间:2024/05/22 02:08
//题意自己看,不会度娘
#include <stdio.h>#include <math.h> #include <algorithm>#include <string.h>using namespace std;int dp[2005][1005];//i代表有几个东西,j代表有几对 int main(int argc, char *argv[]){    int a[3005];//储存物品的质量 int n,k;int i,j;while(scanf("%d %d",&n,&k)!=EOF){for(i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);//因为使两个物品的平方差最小,所以必定是每次都要拿两个质量差最小的物品,所以要排序。 for(i=0;i<=n;i++){for(j=1;j<=k;j++)dp[i][j]=0xffffff;//循环赋值 }for(i=2;i<=n;i++){for(j=1;j<=i/2&&j<=k;j++)dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(int)pow(a[i-1]-a[i],2));//每次判断是原先取得小还是加a[i-1]与a[i]平方差小 }printf("%d\n",dp[n][k]);}return 0;}
//Start-ZJ
//2017/12/18/19:40

原创粉丝点击