搬寝室

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 20642    Accepted Submission(s): 7013

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
 
 题目链接:

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



题目大意:久违的中文题,不解释



题目分析:显然左右手物品重量越接近越好,先依照重量从小到大排序,然后预处理出相邻两个数的差值的平方b[i] = (a[i + 1] - a[i])^2,这样预处理也直接把2k化成k了,显然b[i]和b[i + 1]是不能同一时候取的。定义dp[i][j]为b数组的前i个取了j个时的最少疲劳度。转移方程dp[i][j] = min(dp[i - 1][j], dp[i - 2][j - 1] + b[i]),初始化dp[i][0]=0,dp[1][1]=b[1],其它INF

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 2005;
int const INF = 0x3fffffff;
int dp[MAX][MAX], a[MAX], b[MAX]; int main()
{
int n, k;
while(scanf("%d %d", &n, &k) != EOF)
{
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
int sum = 0;
for(int i = 1; i < n; i++)
b[i] = (a[i + 1] - a[i]) * (a[i + 1] - a[i]);
n --;
for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= k; j++)
dp[i][j] = INF;
dp[i][0] = 0;
}
dp[1][1] = b[1];
for(int i = 2; i <= n; i++)
for(int j = 1; j <= k; j++)
dp[i][j] = min(dp[i - 1][j], dp[i - 2][j - 1] + b[i]);
printf("%d\n", dp[n][k]);
}
}

HDU 1421 搬寝室 (线性dp 贪心预处理)的更多相关文章

  1. hdu 1421 搬寝室(dp)

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

  2. hdu 1421 搬寝室 (dp)

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

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

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

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

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

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

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

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

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

随机推荐

  1. js中true和false判断

    布尔类型里只有这6参数个返回false,其它都为true Boolean(false) // false Boolean(undefined) // false Boolean(null) // fa ...

  2. CSS中可继承的属性

    不可继承的属性太多了不要背,记住可以继承的属性有哪些就行了.可以继承的属性很少,只有颜色,文字,字体间距行高对齐方式,和列表的样式可以继承.这么来记很轻松的呀!不要被下边的吓到了哦~ 所有元素可继承: ...

  3. Java图片上查找图片算法

    之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就是在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找 ...

  4. Props、State、Refs 与表单处理

    我们也了解到 React Component 事实上可以视为显示 UI 的一个状态机(state machine),而这个状态机根据不同的 state(透过 setState() 修改)和 props ...

  5. java 物理分页和逻辑分页

    A.逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低.1.逻辑分页的第一种方式,利用ResultSet的滚动分页.这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”.步骤 ...

  6. Server 2008 R2 事件查看器实现日志分析

    在 windows server 2008 R2 中,可以通过点击 "开始" -> "管理工具" -> "事件查看器" ,来打开 ...

  7. Fiddler——基本常识

    web session界面 inspector面板 xml:查看XML数据 json:查看json数据 raw:可以完整查看请求的内容 cookies:可以查看请求的cookie header:查看请 ...

  8. springMVC接收get请求传递多个参数

    @RequestMapping(value = "/sendSignal/{state}/{limberId}/{account}", method = RequestMethod ...

  9. codeforces_456C_dp

    链接:http://codeforces.com/problemset/problem/456/C C. Boredom time limit per test 1 second memory lim ...

  10. swift Enumerations

    swift Enumerations enum.case.switch CaseIterable allCases 要区别枚举变量和关联值 枚举变量参与枚举运算: 关联值和rawvalue不参与. A ...