博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1421 搬寝室
阅读量:6604 次
发布时间:2019-06-24

本文共 1433 字,大约阅读时间需要 4 分钟。

搬寝室是很累的,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 11 3

Sample Output

4

 

分析 先排序,要选择两个成一对的话一定是选邻近的。定义dp[i][j]为i个物体选了j对,其中i>=2*j。 dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+a[i-1]);即选择i-1和i成一对或者不选。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int maxn = 1e4+5;const int mod = 77200211+233;typedef pair
pii;#define X first#define Y second#define pb push_back//#define mp make_pair#define ms(a,b) memset(a,b,sizeof(a))const int inf = 0x3f3f3f3f;#define lson l,m,2*rt#define rson m+1,r,2*rt+1typedef long long ll;#define N 100010int dp[2020][2020];int a[2020];int main(){ int n,k; while(~scanf("%d%d",&n,&k)){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); for(int i=1;i
i) dp[i][j]=inf; else dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+a[i-1]); } } cout<
<
 

 

 

转载于:https://www.cnblogs.com/fht-litost/p/8858059.html

你可能感兴趣的文章
你必须知道的HTTP基本概念
查看>>
当下拉列表数据过大时,该如何应对?
查看>>
使用OpenGrok搭建 可搜索可跳转的源码 阅读网站
查看>>
HTML5开发中的javascript闭包
查看>>
Android ContentProvider调用报错"Bad call:..."及相关Binder权限问题分析
查看>>
ionic3 教程(二)登录页制作
查看>>
Python正则表达式初识(四)
查看>>
不明恶意攻击致<搜狗搜索><搜索结果>跳转<百度搜索>技术原理分析
查看>>
不务正业的前端之SSO(单点登录)实践
查看>>
配置通过VLANIF实现跨设备VLAN内通信
查看>>
一站式计费解决方案——腾讯计费首次亮相昆明
查看>>
Linux-正则表达式
查看>>
文字转语音转换的方法有哪些?
查看>>
linux系统电视盒子到底是什么
查看>>
MySQL的root用户密码忘了 , 该怎么办?
查看>>
一次性可以导入多少首歌曲到NoteBurner Spotify Music Converter中?
查看>>
基本shell脚本的编辑及变量
查看>>
$ORACLE_HOME/bin/oracle执行文件
查看>>
免密码登陆
查看>>
加密和解密 tar
查看>>