搬寝室 ----- 动态规划
**
搬寝室
**
搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2k件过去就行了.但还是会很累,因为2k也不小是一个不大于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
题意:
n件物品,需要搬2k件,每搬一次的疲劳度是和左右手的物品的重量差的平方成正比,求搬完这2k件物品后的最佳状态是怎样。
思路:
分两种情况,第i件物品是不是含在第j对里,
1.不含第i件物品则有:dp [i][j] = dp [i-1][j];
从j对里拿i-1个物品
2.含有i件物品 则有:dp [i][j] = dp [i-2][j-1] + (a[i]-a[i-1])*(a[i]-a[i-1]);
从j-1对里拿i-2个物品
动态转移方程为:
dp[i][j]=min(dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]), dp[i][j]=dp[i-1][j]);
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[2021][1010];
int main()
{int n,k,i,j;while(~scanf("%d%d",&n,&k)){int a[2001];for(i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+1+n);//物品重量排序memset(dp,9999999,sizeof(dp));for(i=0;i<=n;i++)dp[i][0] = 0;for(i=2;i<=n;i++)for(j=1;j<=i/2;j++){dp[i][j] = min(dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]),dp[i-1][j]);}printf("%d\n",dp[n][k]);}return 0;
}
搬寝室 ----- 动态规划相关推荐
- hdu 1421 搬寝室 动态规划
http://acm.hdu.edu.cn/showproblem.php?pid=1421 d[n][m] : 在前n个物品里选m对的最小疲劳 当地n件不选时 d[n][m]=d[n-1][m] 当 ...
- 动态规划——搬寝室(hdu1421)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1421 题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从 ...
- 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 对物品在 ...
- HDU 1421 搬寝室 解题报告(超详细)
**搬寝室 Time Limit: 2000/1000 MS Memory Limit: 65536/32768 K Problem Description 搬寝室是很累的,xhd深有体会.时间追述2 ...
- 搬寝室(HDU 1421 DP)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- 题目1452:搬寝室(dp题目)
题目链接:http://ac.jobdu.com/problem.php?pid=1452 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- hdoj_1421搬寝室
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- TKO 6-7DP入门之搬寝室
搬寝室 涉及数学公式的证明以及一些贪心思想: Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要 ...
- 【动态规划笔记】背包问题:搬寝室
- hdu 1421 搬寝室 (dp)
思路分析: dp[i][j] 表示选取到第 i 个 组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...
最新文章
- windows系统下的FTP命令
- 图解用RadASM开发一个同时编辑多个文档的编辑器
- SpringCloud组件:Eureka的服务发现与消费
- 订阅mysql的二进制日志_MySQL二进制日志
- c语言 用一维数组存储二叉树,用一维数组存储二叉树时,总是以前序遍历顺序存储结点。( ? )...
- SharePointChina.com上线 《MOSS 2007 前瞻技术指南》第一章完整版预览申请
- 公司盘点员工,不上班的员工要给钱吗?
- 什么是WAF(lua+nginx)
- Linux下如何识别TF卡
- Java动态生成excel模板、和动态模板数据导出
- TeX Live 2021 从卸载到安装指南
- 简单快捷的ArcGIS 10.7安装方法
- tp6的运行流程+一个完整的tp6请求的流程:
- 软件图标显示不正常的问题
- linux 切换 amd 显卡,ubuntu 14.10 (64位)下载amd显卡,实现双显卡切换
- 电脑免费录屏软件有哪些?5款视频录制软件免费版
- 乘风破浪的技术大咖再次集结 | 腾讯云TVP持续航行中
- 推荐系统组队学习之概述
- 『Halcon与C#混合编程』010_相机实时采集并显示(或循环显示)
- oracle报错:ORA-28001: the password has expired