hdu 1421 dp

搬寝室

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18191    Accepted Submission(s): 6170


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
 1 /*
 2 dp(i,j)表示:i个数内,选出j对数的最优策略
 3 dp(i,j)=max(dp(i-1,j),dp(i-2,j-1)+(a[i]-a[i-1])^2)
 4 */
 5 #include <iostream>
 6 #include <cstdio>
 7 #include <cstring>
 8 using namespace std;
 9 
10 typedef __int64 LL;
11 const LL INF=1e15;
12 const int maxn=2005;
13 int a[maxn];
14 LL dp[maxn][maxn];
15 inline LL min(LL a,LL b){return a<b?a:b;}
16 
17 void quicksort(int l,int r)
18 {
19     if(l<r)
20     {
21         int t=a[l],i=l,j=r;
22         while(i!=j)
23         {
24             while(a[j]>=t && i<j) j--;
25             while(a[i]<=t && i<j) i++;
26             if(i<j) swap(a[i],a[j]);
27         }
28         a[l]=a[i];a[i]=t;
29         quicksort(l,i-1);
30         quicksort(i+1,r);
31     }
32 }
33 
34 int main()
35 {
36     int n,k,i,j;
37     while(~scanf("%d%d",&n,&k))
38     {
39         for(i=1;i<=n;i++) scanf("%d",a+i);
40         quicksort(1,n);
41         for(i=0;i<=n;i++)
42         for(j=0;j<=k;j++)
43             dp[i][j]=INF;
44         for(i=0;i<=n;i++) dp[i][0]=0;
45         for(i=2;i<=n;i++)
46         {
47             for(j=1;j<=k && j*2<=i;j++)
48                 dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]));
49         }
50         printf("%I64d\n",dp[n][k]);
51     }
52     return 0;
53 }

 

 

Author
xhd

 

转载于:https://www.cnblogs.com/xiong-/p/4098634.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

socket 编程:回射客户/服务程序

参考 《Unix 网络编程》 github 地址 unp.h #include <stdio.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h> #include <sys/socket.h> #include <stdlib.h> #include <errno.h> #include <sys/wait.h&g…

C++学习笔记25,析构函数总是会宣布virtual

为了永远记住析构函数声明virtual----><<effective c>> 为这句话不一定对,但无需质疑的是这句话是非常实用的. 查看以下的样例: #include <iostream> #include <string> using namespace std; class B{ public:~B(){cout<<"base is dest…

BZOJ-1019 汉诺塔

其实只要非常了解汉诺塔的原理&#xff0c;或者是能计算出对于随机数据一定有解的证明&#xff0c;那么这道题就是水题了。 【Code】转载于:https://www.cnblogs.com/NanoApe/p/4396718.html

C++ 构建最小堆、最大堆

堆的属性 完全二叉树每个节点的值都大于&#xff08;最大堆&#xff09;或都小于&#xff08;最小堆&#xff09;子节点的值 堆只是一种数据的组织形式&#xff0c;存储结构可以用数组&#xff0c;在构建堆的过程中&#xff0c;可以使用完全二叉树的性质求父子节点的下标。 …

那么温暖http合约,入门。

简介 HTTP是一个属于应用层的面向对象的协议&#xff0c;因为其简捷、高速的方式。适用于分布式超媒体信息系统。它于1990年提出。经过几年的使用与发展&#xff0c;得到不断地完好和扩展。眼下在WWW中使用的是HTTP/1.0的第六版&#xff0c;HTTP/1.1的规范化工作正在进行之中&a…

数组中第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k 2 输出: 5示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k 4 输出: 4说明: 你可以假设 k 总是有…

各大互联网公司2014前端笔试面试题–JavaScript篇

很多面试题是我自己面试BAT亲身经历碰到的。整理分享出来希望更多的前端er共同进步吧&#xff0c;不仅适用于求职者&#xff0c;对于巩固复习js更是大有裨益。 而更多的题目是我一路以来收集的&#xff0c;也有往年的&#xff0c;答案不确保一定正确&#xff0c;如有错误或有更…

iOS:苹果企业证书通过网页分发安装app

本文转载至 http://blog.sina.com.cn/s/blog_6afb7d800101fa16.html 苹果的企业级证书发布的应用&#xff0c;是不用设备授权即可直接安装&#xff0c;并且不限设备上限。为了方便分发&#xff0c;苹果有协议实现通过网页链接直接下载安装企业级的应用。 基本的原理就是在生成企…

这道题很难

请编写一个函数&#xff0c;使其可以删除某个链表中给定的&#xff08;非末尾&#xff09;节点。传入函数的唯一参数为 要被删除的节点 。 现有一个链表 – head [4,5,1,9]&#xff0c;它可以表示为: 示例 1&#xff1a; 输入&#xff1a;head [4,5,1,9], node 5 输出&a…

设计模式学习笔记-基础知识篇

1. 设计模式的重要性 1.1 设计模式解决的是在软件过程中如何来实现具体的软件功能。实现同一个功能的方法有很多&#xff0c;哪个设计容易扩展&#xff0c;容易复用&#xff0c;松耦合&#xff0c;可维护&#xff1f;设计模式指导我们找到最优方案。 1.2 设计中往往会存在设计缺…

JavaScript对象类型详解

《JavaScript高级程序设计》已经学习到了第四章&#xff0c;不过因为第五章讲的都是各种对象类型&#xff0c;所以在进行第五章的学习之前&#xff0c;先深入了解一下对象是有好处的。 JavaScript Objects in Detail 关于对象类型的方方面面在这篇文章里都写得很清楚了&#xf…

旋转链表

给定一个链表&#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向…

内心的平静就是财富本身-Cell组件-用友华表的由来-T君

时至今日&#xff0c;Cell组件仍是应用广泛的商业报表组件 作者&#xff1a;人生三毒 编者注&#xff1a;本文作者人生三毒为知名网站及网页游戏公司创始人&#xff0c;此前曾为IT类媒体资深编辑&#xff0c;见证了中国互联网早期的发展。 认识T君之前先认识的是他的软件&#…

mybatis06 增删改差 源码

user.java package cn.itcast.mybatis.po;import java.util.Date;public class User {private int id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址public int getId() {return id;}public voi…

socket 编程 基于 select 实现的回射客户端/服务程序

github 代码 地址 unp.h #include <stdio.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h> #include <sys/socket.h> #include <stdlib.h> #include <errno.h> #include <sys/wait.h> #include <sys…

MyEclipse的优化

出自&#xff1a;http://blog.csdn.net/u010124571/article/details/41316255?refmyread 第一步: 取消自动validation validation有一堆&#xff0c;什么xml、jsp、jsf、js等等&#xff0c;我们没有必要全部都去自动校验一下&#xff0c;只是需要的时候才会手工校验一下&…

NSlog输出

NSLog的定义 void NSLog(NSString *format, …); 基本上&#xff0c;NSLog很像printf&#xff0c;同样会在console中输出显示结果。不同的是&#xff0c;传递进去的格式化字符是NSString的对象&#xff0c;而不是char *这种字符串指针。 实例 NSLog可以如下面的方法使用&#x…

推理题,会则秒解

你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a;桌子上有一堆石头&#xff0c;每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人&#xff0c;每一步都是最优解。 编写一个函数&#xff0c;来判断你是否可以在给定石头…

【图论】割点、桥、双连通

连通分量 个数可以通过一次BFS或者DFS得到 割点和桥 可以枚举删除每一个点或者每一条边&#xff0c;判断连通分量个数是否增加 更好的方法 该算法是R.Tarjan发明的。对图深度优先搜索&#xff0c;定义DFS(u)为u在搜索树&#xff08;以下简称为树&#xff09;中被遍历到的次序号…

奇酷手机显示Log

1、在桌面点击拨号&#xff0c;在拨号盘输入“*20121220#”&#xff0c;进入工程模式;2、看到日志输出等级&#xff0c;点进去 Log print enable 选 enable Java log level 选 LOGV C and C log level 选 LOGV Kernel log level 选 KERN_DEBUG3、完毕 参考网址&#xff1a;http…