搬寝室

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14107    Accepted Submission(s): 4751

Problem Description
搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xhd希望知道搬完这2*k件物品后的最佳状态是怎样的(也就是最低的疲劳度),请告诉他吧.
 
Input
每组输入数据有两行,第一行有两个数n,k(2<=2*k<=n<2000).第二行有n个整数分别表示n件物品的重量(重量是一个小于2^15的正整数).
 
Output
对应每组输入数据,输出数据只有一个表示他的最少的疲劳度,每个一行.
 
Sample Input
2 1
1 3
 
Sample Output
4
 
Author
xhd
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  1176 1087 1058 1069 1203 

  
  经典动态规划题。
  这是一道动态规划的水题,但对动规仍是感觉不明觉厉的状态的我想起来着实非常吃力。看着别人的解题报告费了N多脑细胞才磕磕绊绊地写出状态转移方程,如下:
  dp[i][j] = Min ( dp[i-2][j-1] + (a[i]-a[i-1]) * (a[i]-a[i-1]) , dp[i-1][j] ) ;

  dp[i][j]代表在前 i 个物品中取 j 对搬运的最小疲劳值。

  思路我就不写了,因为我的思路不甚清晰,所以就贴上别人的链接,有兴趣的可以看看高人写的:

  HDU 1421 搬寝室     hdu1421n中选k个不相邻数的最小值     hdu 1421 搬寝室

  我想说的是要注意两点,一开始我用的自己写的冒泡排序,后来提交超时,看网上的代码大都直接调用了库函数(像qsort、sort函数),我改用sort函数之后不再超时,说明好的排序算法在做题中还是很有用处的!之后出现WA的现象,调试发现这是dp数组初始化不对造成的,因为要比较大小,需要取较小值,所以应该初始化为一个极大值(例如9999999),而且dp[i][0]这一溜的数需要初始化为0。

  下面是代码:

 #include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int dp[][];
int Min(int a,int b)
{
//if(a==0)
// return b;
//if(b==0)
// return a;
return a<b?a:b;
}
int main()
{
int n,k;
while(cin>>n>>k){
int a[];
for(int i=;i<=n;i++)
cin>>a[i];
//排序
/* 冒泡排序超时
for(int i=1;i<=n-1;i++)
for(int j=1;j<=n-i;j++)
if(a[j]>a[j+1]){
int t;
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
*/
sort(a+,a++n); //初始化
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
dp[i][] = ; //实现dp数组
for(int i=;i<=n;i++)
for(int j=;j<=i/;j++){
dp[i][j] = Min(dp[i-][j-]+(a[i]-a[i-])*(a[i]-a[i-]),dp[i-][j]);
}
cout<<dp[n][k]<<endl;
} return ;
}
Run ID Submit Time Judge Status Pro.ID Exe.Time Exe.Memory Code Len. Language Author
10011975 2014-01-22 20:13:55 Accepted 1421 750MS 8228K 750 B G++ freecode

Freecode : www.cnblogs.com/yym2013

hdu 1421:搬寝室(动态规划 DP + 排序)的更多相关文章

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

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

  2. hdu 1421 搬寝室(dp)

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

  3. hdu 1421 搬寝室 (dp)

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

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

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

  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. hdu 1241 搬寝室 水dp

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

  9. [HDU 1421]搬寝室(富有新意的DP)

    题目地址:pid=1421" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=1421 题目大 ...

随机推荐

  1. shell统计日志

    #nginx日志统计独立ip的个数: awk '{print $1}' /path-to-log-dir/access.log | sort | uniq | wc -l #查询访问最多的前10个ip ...

  2. spring 发送邮件问题

    public void sendEmail() throws Exception { JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); ...

  3. nginx配置用户认证

    location ~ .*admin\.php$ {             auth_basic "weifenglinux auth";             auth_ba ...

  4. jquery api 常见api 元素操作例子

    append_prepend.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...

  5. 一个事件激活多个JavaScript函数

    http://www.cnblogs.com/meil/archive/2006/09/20/509359.html如果你的网页中一个“OnLoad”事件要激活两个以上的JavaScript函数,那怎 ...

  6. Linux命令-文件搜索命令:whereis

    主要用途:查找linu命令,而不是磁盘上的普通文件,并且能看到命令的目录和帮助文件. whereis useradd 查找命令useradd的所在位置,同时还查出来它的帮助文件所在位置 whereis ...

  7. 在spring+springMvc+mabatis框架下集成swagger

    我是在ssm框架下集成swagger的,具体的ssm搭建可以看这篇博文: Intellij Idea下搭建基于Spring+SpringMvc+MyBatis的WebApi接口架构 本项目的GitHu ...

  8. C#指南,重温基础,展望远方!(9)C#接口

    接口定义了可由类和结构实现的协定. 接口可以包含方法.属性.事件和索引器. 接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员. 接口可以采用多重继承. 在以下示例中,接口 I ...

  9. mysql string types ---- mysql 字符类型详解

    一.mysql 中包涵的字符类型: [national] char [(m)] [character set charset_name] [collate collation_name] [natio ...

  10. 蜜果私塾:informix数据库学习合集[不断补充]

    一.infomix使用备忘录     目录结构:     1. 启动与停止命令:      2. 修改数据库编码:      3. 查看informix占用的端口:      4. 使用dbacces ...