http://acm.hdu.edu.cn/showproblem.php?pid=2639

题目大意是,往背包里赛骨头,求第K优解,在普通01背包的基础上,增加一维空间,那么F[i,v,k]可以理解为前i个物品,放入容量v的背包时,第K优解的值。时间复杂度为O(NVK)。

Talk is cheap.

看代码吧。

  1. import java.util.Scanner;
  2.  
  3. public class BoneCollector {
  4. public static void main(String[] sure) {
  5. int t;
  6. Scanner sc = new Scanner(System.in);
  7. t = sc.nextInt();
  8. while (t-- > 0) {
  9. int n, v, k;
  10. n = sc.nextInt();
  11. v = sc.nextInt();
  12. k = sc.nextInt();
  13. int[] val = new int[n + 1];
  14. int[] vol = new int[n + 1];
  15. int[][] dp = new int[v + 2][k + 2];
  16. int[] tp_a = new int[k + 2];
  17. int[] tp_b = new int[k + 2];
  18.  
  19. for (int i = 0; i < n; i++) {
  20. val[i] = sc.nextInt();
  21. }
  22. for (int i = 0; i < n; i++) {
  23. vol[i] = sc.nextInt();
  24. }
  25. for (int i = 0; i < n; i++) {
  26. for (int j = v; j >= vol[i]; j--) {
  27. for (int m = 1; m <= k; m++) {
  28. tp_a[m] = dp[j][m];
  29. tp_b[m] = dp[j - vol[i]][m] + val[i];
  30. }
  31. int tmp = 1, a = 1, b = 1;
  32. tp_a[k+1] = tp_b[k+1] = -1;
  33. //循环,依次将前K优的存到dp数组
  34. while (tmp <= k && (a <= k || b <= k)) {
  35. if (tp_a[a] > tp_b[b]) {
  36. dp[j][tmp] = tp_a[a];
  37. a++;
  38. } else {
  39. dp[j][tmp] = tp_b[b];
  40. b++;
  41. }
  42. if (dp[j][tmp] != dp[j][tmp - 1])
  43. tmp++;
  44. }
  45. }
  46. }
  47. System.out.println(dp[v][k]);
  48. }
  49. }
  50. }

01背包之求第K优解——Bone Collector II的更多相关文章

  1. hdu 2639 Bone Collector II (01背包,求第k优解)

    这题和典型的01背包求最优解不同,是要求第k优解,所以,最直观的想法就是在01背包的基础上再增加一维表示第k大时的价值.具体思路见下面的参考链接,说的很详细 参考连接:http://laiba2004 ...

  2. dp之01背包hdu2639(第k优解)

    http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意:给出一行价值,一行体积,让你在v体积的范围内找出第k大的值.......(注意,不要 和它的第一题混 ...

  3. Bone Collector II---hdu2639(01背包求第k优解)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639求01背包的第k大解.合并两个有序序列 选取物品i,或不选.最终的结果,是我们能在O(1)的时间内 ...

  4. 关于01背包求第k优解

    引用:http://szy961124.blog.163.com/blog/static/132346674201092775320970/ 求次优解.第K优解 对于求次优解.第K优解类的问题,如果相 ...

  5. hdu2639(背包求第k优解)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意:给出一行价值,一行体积,让你在v体积的范围内找出第k大的值 分析:dp[i][j][k]表 ...

  6. HDU 2639 骨头收集者 II【01背包 】+【第K优决策】

    题目链接:https://vjudge.net/contest/103424#problem/H 题目大意:与01背包模板题类似,只不过要我们求第K个最大的总价值. 解题分析: 其基本思想是将每个状态 ...

  7. vijos P1412多人背包 DP的前k优解

    https://vijos.org/p/1412 把dp设成,dp[i][v][k]表示在前i项中,拥有v这个背包,的第k大解是什么. 那么dp[i][v][1...k]就是在dp[i - 1][v] ...

  8. hdu–2369 Bone Collector II(01背包变形题)

    题意:求解01背包价值的第K优解. 分析: 基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并. 首先看01背包求最优解的状态转移方程:\[dp\left[ j ...

  9. (01背包 第k优解) Bone Collector II(hdu 2639)

    http://acm.hdu.edu.cn/showproblem.php?pid=2639       Problem Description The title of this problem i ...

随机推荐

  1. [译]C++如何切分字符串

    声明: 翻译仅以技术学习和交流为目的,如需转载请务必标明原帖链接. http://stackoverflow.com/questions/236129/how-to-split-a-string-in ...

  2. 第二篇:智能电网(Smart Grid)中的数据工程与大数据案例分析

    前言 上篇文章中讲到,在智能电网的控制与管理侧中,数据的分析和挖掘.可视化等工作属于核心环节.除此之外,二次侧中需要对数据进行采集,数据共享平台的搭建显然也涉及到数据的管理.那么在智能电网领域中,数据 ...

  3. iOS网络HTTP、TCP、UDP、Socket 知识总结

    OSI 七层模型 我们一般使用的网络数据传输由下而上共有七层,分别为物理层.数据链路层.网络层.传输层.会话层.表示层.应用层,也被依次称为 OSI 第一层.第二层.⋯⋯. 第七层. 如下图: 各层功 ...

  4. CentOS修改SSH默认端口

    1. 修改配置文件 vim /etc/ssh/sshd_config 修改 #Port 22 这行,  去掉 #  修改后面的端口号 例如 Port 2123 重启sshd服务 /etc/init.d ...

  5. MyBatis 学习总结(一)

    1.原生JDBC(Java database connectity)操作数据库(以MySQL数据为例)步骤 1.1 加载驱动 Class.forName("com.mysql.jdbc.Dr ...

  6. 数据库 ORM框架 ORMLite

    几个ORM框架的比较 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思.其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语 ...

  7. oracle 的变量的定义和赋值

    第一种 :先定义后赋值 代码 : declare     V_AgeingType        varchar2(500); begin V_AgeingType :='111'; end 第二种 ...

  8. 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

    折腾几天记载一下,由于项目实际需要,从edmx生成的实体类能自动继承自定义的基类,这个基类不是从edmx文件中添加的Entityobject. 利用ADO.NET C# POCO Entity Gen ...

  9. 弹出层easydialog-v2.0

    地址:http://www.lanrentuku.com/down/js/qita-862/ easydialog.css ;;; } .easyDialog_wrapper{ width:320px ...

  10. java直接输出Excel 页面实现下载

    public String excelDomnload() throws Exception{ try{ /* String path = GlobalKeys.getFunctionConfig(& ...