搬寝室

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

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
拍暴搜TLE,DP解;
dp[i][j]表示前i件物品取j对的最优解

(1)i==j*2    dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1])

(2)i>j*2       dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]))

 1 #include <cstring>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <iostream>
 5 using namespace std;
 6 #define Max 2005
 7 int a[Max];
 8 int b[Max][Max];
 9 int k,n;
10 int sum=0,temp;
11 int func(int x,int y)
12 {
13     if(b[x][y]==0)
14         b[x][y]=(a[x]-a[y])*(a[x]-a[y]);
15     return b[x][y];
16 }
17 void dfs(int index,int s,int sep)
18 {
19     int i,j;
20     if(s>=sum)
21         return;
22     if(sep==(k+1))
23     {
24         if(s<sum)
25             sum=s;
26         return;
27     }
28     for(i=index;i<=n-(k-sep+1)*2+1;i++)
29     {
30         temp=func(i,i+1);
31         dfs(i+2,s+temp,sep+1);
32     }
33     return;
34 }
35 int main()
36 {
37     int i,j;
38     memset(b,0,sizeof(b));
39     freopen("in.txt","r",stdin);
40     while(scanf("%d%d",&n,&k)!=EOF)
41     {
42         sum=Max;
43         for(i=1;i<=n;i++)
44             scanf("%d",&a[i]);
45         sort(a+1,a+n+1);
46         dfs(1,0,1);
47         printf("%d\n",sum);
48     }
49 }

 1 dp[i][j]表示前i件物品取j对的最优解#include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 #define N 2050
 6 #define ll int
 7
 8 ll dp[N][N];
 9 ll a[N];
10
11 int main()
12 {
13     ll n,k,i,j;
14
15     while(scanf("%d%d",&n,&k)!=EOF)
16     {
17         for(i=1;i<=n;i++)
18             scanf("%d",&a[i]);
19         sort(a+1,a+n+1);
20         memset(dp,0,sizeof(dp));
21         dp[2][1]=(a[2]-a[1])*(a[2]-a[1]);
22
23         for(j=1;j<=k;j++)
24             for(i=j*2;i<=n;i++)
25             {
26                 dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);
27                 if(j*2<i)
28                 {
29                     dp[i][j]=min(dp[i-1][j],dp[i][j]);
30                 }
31
32
33             }
34         printf("%d\n",dp[n][k]);
35     }
36
37     return 0;
38 }

转载于:https://www.cnblogs.com/a1225234/p/5259028.html

搬寝室(HDU 1421 DP)相关推荐

  1. 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 对物品在 ...

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

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

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

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

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

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

  5. hdoj_1421搬寝室

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

  6. TKO 6-7DP入门之搬寝室

    搬寝室 涉及数学公式的证明以及一些贪心思想: Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要 ...

  7. HDU 5928 DP 凸包graham

    给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...

  8. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  9. hdu 1421 搬寝室 (dp)

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

最新文章

  1. java两个jre_为什么会有两个jre?060925(原创)
  2. 直播赠书丨如何高效学习计算机视觉?
  3. python文件编译_我算是白学Python了,现在才知道原来Python是可以编译的
  4. java 虚拟机 初始化_Java虚拟机 类初始化 阶段
  5. 安装debian第一天遇到的几个问题及解决方案
  6. Lucene查询索引代码实现
  7. quill鼠标悬浮 出现提示_「超逸酷玩」VT300S RGB电竞游戏鼠标支持云同步自定义设置...
  8. Magento 创建优惠卷 Create unique coupon code in Magento
  9. 实战HTML:花瓣网
  10. 学Java编程可以做什么?发展方向有哪些?
  11. 二进制 八进制 十进制 转换
  12. 康托尔—探索无穷的勇士
  13. 陆面生态水文模拟与多源遥感数据同化技术
  14. oracle水仙花,希腊神话中的水仙花和回声
  15. linux文件 含义,Linux各个文件及其含义
  16. python xls 转化 xlsx
  17. 祝您健康:抢救脑溢血患者的神奇秘方:针刺十宣穴,涌泉穴
  18. ITSM | 权威指南发布,高速IT服务管理团队是什么样子的?
  19. MLM模型中,是否应该按15%的比例mask?
  20. 二年级机器人伙伴看图写话_机器人的看图写话范文-看图写话机器人老师?

热门文章

  1. 《Python编程从入门到实践》记录之第2章 变量和简单数据类型总结(思维导图)
  2. 基于Tensorflow实现DeepFM
  3. ElasticSearch优化系列二:机器设置(内存)
  4. Linux 开机启动
  5. cocos2d-android-1 使用方法
  6. python三种数据类型_Python零基础入门学习02:Python基本数据类型:数字类型
  7. centeros7安装mysql
  8. BZOJ4545: DQS的trie 广义后缀自动机_LCT
  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
  10. c# 删除文件,清理删除文件