搬寝室

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. Spring bean三种创建方式

    spring共提供了三种实例化bean的方式:构造器实例化(全类名,反射).工厂方法(静态工厂实例化   动态工厂实例化)和FactoryBean ,下面一一详解: 1.构造器实例化 City.jav ...

  2. 使用Ubuntu12.04创建无线WiFi热点供手机上网

    [日期:2012-10-10]   1,单击右上角网络连接管理器(记得打开电脑的无线网络开关),选择“编辑连接…”   2,选择无线,然后单击添加.   3,{无线}输入连接名称,如longer,然后 ...

  3. sms_queue 短信队列

    git地址:https://github.com/Filix/sms_queue 简介 通过队列的方式发送短信,暂时实现了redis作为队列. 以实现的第三方短信服务: 百悟.漫道. 发送短信方,只需 ...

  4. javascript通用函数库

    /* -------------- 函数检索 -------------- trim函数:                         trim() lTrim() rTrim() 校验字符串是否 ...

  5. mysql max和count、limit优化

    1.max 的优化记得要对max里面的字段使用索引,可以大大加快速度 2.count的优化,count(*)和count(id) 的结果可能是不一样的,因为可能存在null的情况 3.distinct ...

  6. Linux命令-权限管理命令:chmod

    特别注意:在linux中,目录通常是有r和x两个权限的.删除文件的前题是要对文件所在的目录有w的权限才可以. cd /tmp 切换到tmp目录下面 touch chengshi.list 在当前目录中 ...

  7. 用string存取二进制数据

    STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www ...

  8. Win10 环境安装tesseract-ocr 4.00并配置环境变量

    Tesseract-OCR的Training简明教程 https://blog.csdn.net/blueheart20/article/details/53207176 一.安装: 选择对应版本,h ...

  9. atitit.提升研发管理的利器---重型框架 框架 类库的区别

    atitit.提升研发管理的利器---重型框架 框架 类库的区别 1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 3. 应用框架 1 4. 类库 2 5. 框架是不可 ...

  10. C++11中的继承构造函数

    时间:2014.06.19 地点:基地 ------------------------------------------------------------------------- 一.问题描写 ...