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
思路:首先,我们应该对输入数据进行一次排序,按顺序排好后很容易可以知道相邻两个的物品重量差一定是对于这两个物品来说是最小的。
DP[ i ][ j ] = min(DP[ i-1 ][ j ],DP[ i - 2][ j - 1] + (a[ i ] - a [ i - 1 ])^2)
#include <cstdio>
#include <map>
#include <iostream>
#include<cstring>
#include<bits/stdc++.h>
#define ll long long int
#define M 6
using namespace std;
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
int moth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int dir[4][2]={1,0 ,0,1 ,-1,0 ,0,-1};
int dirs[8][2]={1,0 ,0,1 ,-1,0 ,0,-1, -1,-1 ,-1,1 ,1,-1 ,1,1};
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;
int n,k;
int a[2007];
int dp[2007][2007]; //表示前i个物品中选择了j对
int main(){ios::sync_with_stdio(false);while(cin>>n>>k){for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n); //保证相差最小 for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)dp[i][j]=inf;dp[0][0]=0;for(int i=2;i<=n;i++)for(int j=1;2*j<=i;j++){dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]));}cout<<dp[n][k]<<endl;}return 0;
}

转载于:https://www.cnblogs.com/wmj6/p/10392341.html

hdu 1421 搬寝室(dp)相关推荐

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

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

  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 搬寝室 动态规划

    http://acm.hdu.edu.cn/showproblem.php?pid=1421 d[n][m] : 在前n个物品里选m对的最小疲劳 当地n件不选时 d[n][m]=d[n-1][m] 当 ...

  4. hdu 1421 搬寝室

    状态转移方程还是很难找啊...... 感觉自己分析很不到位,依旧参考了别人的分析...... #include <iostream> #include <cstdio> #in ...

  5. hdu1421 搬寝室 DP

    转载: /*证明:从4个数中 a b c d  依次递增: 选取相邻的两个数一定是最小得 及:(a-b)^2+(c-d)^2<(a-c)^2+(b-d)^2&&(a-b)^2+( ...

  6. 搬寝室(HDU 1421 DP)

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

  7. 题目1452:搬寝室(dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1452 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  8. 动态规划——搬寝室(hdu1421)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1421 题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从 ...

  9. HDU1421 搬寝室

    题目:搬寝室 典型的DP,状态方程: dp[k][i]=min(dp[k-1][i-2]+(a[i]-a[i-1])^2,dp[k][i-1]);         dp[k][i] 表示 k 对物品在 ...

  10. hdoj_1421搬寝室

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

最新文章

  1. 如何在 CPU 上优化 GEMM
  2. asp.net/c#字符格式化大总结
  3. 如何用计算机玩我的世界,怎样在电脑上玩《我的世界》
  4. 获取设置本地当前默认打印机
  5. chkconfig的用法
  6. php msgid排重,如何应用php数组对百万数据停止排重
  7. 高斯投影正反算C语言程序代码,高斯投影正反算 源程序
  8. 设计模式之观察者模式(Java)
  9. python写的软件怎么逆向_python逆向工程:通过代码生成类图
  10. Flutter基础—开发环境与入门
  11. 淘宝电子面单怎么用CAINIAO打印组件调打印偏移
  12. 关于邮件模板的兼容性1
  13. PHP PDF转图片:设置图像的色彩空间 RGBCMYK互转
  14. c语言小游戏 flybird Easyx编程 项目源码讲解
  15. 希捷ST31000528AS Disk Boot Failure, Insert System Disk and Press Enter和飞利浦的193ei显示器亮的问题
  16. 计算机房电磁辐射防护,机房防辐射处理解决方案
  17. 计算机二级选择题瞎蒙,一级消防员考试,一级消防员考试题大全
  18. 猪:原来大数据都是骗“猪”的
  19. Table边框使用总结 ,只显示你要显示的边框
  20. 计算机教学设计与反思,[信客教案及反思] 信息技术教案课后反思

热门文章

  1. 解决办法:std没有成员initializer_list
  2. 错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
  3. 坚持写博客,果然有人找吾进行技术合作
  4. GTK 3.0弹出窗口及设置背景图片的代码
  5. memcpy-avx-unaligned/strcpy_sse2_unaligned崩溃记录
  6. 光干涉波谷,有可能低于绝对零度
  7. 自己经常测试,不要等别人发现系统死了
  8. 量子纠缠可能是真实存在
  9. 进入32位保护模式之路
  10. 天线工程手册_胆大心细 专业敬业——记FPSO改装MV30项目球形天线组装工程