题目地址:

pid=1421" target="_blank">http://acm.hdu.edu.cn/showproblem.php?

pid=1421

题目大意:给出n个物品,要你选出k对物品。使得每对物品之差的平方之和最小。

思路。动态规划求解。首先将物品按重量升序排序,依据贪心思想,每对物品必定是相邻的两个物品,这样重量差的平方才干保证最小。然后DP,用f[i][j]表示前i个物品,选j对的最少代价,这里须要进行一个重要的分类讨论:

(1)假设j*2=i,即前i个物品所实用于配对了,非常明显第j对物品是第i-1号物品和第i号物品,f[i][j]=f[i-2][j-1]+(w[i]-w[i-1])^2

(2)其它情况。前i个物品并没有全然用于配对。能够选择第i个物品不配对。这时f[i][j]=f[i-1][j]。或者第i个物品參与配对,同(1)。第i个物品和第i-1个物品配对,f[i][j]=f[i-2][j-1]+(w[i]-w[i-1])^2

终于的答案就是f[n][k]

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm> #define MAXN 2010 using namespace std; int f[MAXN][MAXN]; //f[i][j]=前i个物品。选j对的最小花费
int w[MAXN]; int min(int a,int b)
{
if(a<b) return a;
return b;
} int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(f,0,sizeof(f));
w[0]=0;
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
sort(w+1,w+n+1);
for(int i=2;i<=n;i++) //前i个物品
for(int j=1;j*2<=i;j++) //选j对
{
if(i!=2*j) f[i][j]=min(f[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),f[i-1][j]); //要么第i个物品和第i-1个物品配对。要么留着第i个物品不配对
else f[i][j]=f[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]);
}
printf("%d\n",f[n][k]);
}
return 0;
}



[HDU 1421]搬寝室(富有新意的DP)的更多相关文章

  1. 题解报告:hdu 1421 搬寝室(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421 Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9 ...

  2. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  3. HDU 1421 搬寝室 (线性dp 贪心预处理)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  4. hdu 1421 搬寝室(dp)

    Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...

  5. HDU 1421 搬寝室(经典DP,值得经常回顾)

    搬寝室 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status D ...

  6. HDU 1421 搬寝室

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. HDU 1421 搬寝室 解题报告(超详细)

    **搬寝室 Time Limit: 2000/1000 MS Memory Limit: 65536/32768 K Problem Description 搬寝室是很累的,xhd深有体会.时间追述2 ...

  8. 【dp】HDU 1421 搬寝室

    http://acm.hdu.edu.cn/showproblem.php?pid=1421 [题意] 给定n个数,要从n个数中选择k个二元组{x,y},最小化sum{(x-y)^2} 2<=2 ...

  9. hdu 1421 搬寝室 (dp)

    思路分析: dp[i][j] 表示选取到第 i 个   组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...

随机推荐

  1. Cracking the Coding Interview 4.8

    You are given a binary tree in which each node contains a value. Design an algorithm to print all pa ...

  2. Python定制容器

    Python 中,像序列类型(如列表.元祖.字符串)或映射类型(如字典)都是属于容器类型,容器是可定制的.要想成功地实现容器的定制,我们需要先谈一谈协议.协议是什么呢?协议(Protocols)与其他 ...

  3. .Net Core 学习(二)上篇

    用Visual Studio和ASP.NET Core MVC创建Web API 1.启动Visual Studio.从文件菜单,选择新建>项目.选择ASP.NET Core Web Appli ...

  4. 前端性能优化---DOM操作

    小结 1缓存DOM对象 场景:缓存DOM对象的方式也经常被用在元素的查找中,查找元素应该是DOM操作中最频繁的操作了,其效率优化也是大头.在一般情况下,我们会根据需要,将一些频繁被查找的元素缓存起来, ...

  5. OpenCL C

    OpenCL C OpenCL  简介 opencl C是ISO C99的一个扩展,主要区别如下: 去除了C99的一些特性,如:标准C99头文件,函数指针,递归,变长数组,和位域 增加了一些特性用于并 ...

  6. js点击事件 注册下一步实现代码

    点击事件: <body> <input type="button" id="btn1"/> <input type="b ...

  7. 九九乘法表(for循环)

    九九乘法表:<br /><script>for(var i=0;i<10;i++){ for(var j=1;j<=i;j++) { var a=j*i docum ...

  8. HIVE 命令记录

    HIVE 命令记录 设置hive运行的队列 hive> set mapreduce.job.queuename=ven12; 打印列名 hive> set hive.cli.print.h ...

  9. Tinyxml2学习

    转自http://www.360doc.com/content/13/1223/16/3684846_339528825.shtml,尊重原文 什么是XML? XML全称EXtensible Mark ...

  10. PHP stream_socket_server

    stream_socket_server - 创建一个Internet或Unix域服务器套接字 描述 资源stream_socket_server(字符串local_socket [摘要和错误号[,串 ...