搬寝室

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. OE context 传参数

    来自:http://shine-it.net/index.php/topic,16360.0.html 有个需求想many2one字段关联显示的value在各个模块显示不同的值. 如果直接该rel_n ...

  2. jQuery中.html(“xxx”)和.append("xxx")的区别和不同

    append是追加,html是完全替换比如<p id="1"><p>123</p></p>$("#1").htm ...

  3. servlet awt随机图片验证码

    package rd.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java. ...

  4. Quartz+SpringMVC实现web定时管理任务

    代码地址如下:http://www.demodashi.com/demo/13978.html 使用背景 相信大家在工作过程中,肯定会遇到很多任务定时执行,修改定时任务的时间,执行一次定时任务等等.下 ...

  5. 用Html写一个简单的登陆界面

    <!DOCTYPE html> <html> <title>登陆页面</title> <head> <meta charset=&qu ...

  6. mysql root用户密码个性

    对名为“mysql”数据库下的表“user”进行操作如下语句:update user set password=PASSWORD("your_password") where us ...

  7. xaf 修改主页logo

    https://documentation.devexpress.com/#Xaf/CustomDocument3156

  8. C#:TextBox控件操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  9. machine_learning-knn算法具体解释(近邻算法)

    近邻算法是机器学习算法中的入门算法,该算法用于针对已有数据集对未知数据进行分类. 该算法核心思想是通过计算预測数据与已有数据的相似度猜測结果. 举例: 如果有例如以下一组数据(在下面我们统一把该数据作 ...

  10. 温故而知新 js 的错误处理机制

    // 在函数块的try中return,会直接成为函数的return值 function test() { try { alrt(123) return 'success' } catch(err) { ...