有 NN 个物品和一个容量是 VV 的背包。

物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。

如下图所示:

如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。

每件物品的编号是 ii,体积是 vivi,价值是 wiwi,依赖的父节点编号是 pipi。物品的下标范围是 1…N1…N。

求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。

输出最大价值。

输入格式

第一行有两个整数 N,VN,V,用空格隔开,分别表示物品个数和背包容量。

接下来有 NN 行数据,每行数据表示一个物品。
第 ii 行有三个整数 vi,wi,pivi,wi,pi,用空格隔开,分别表示物品的体积、价值和依赖的物品编号。
如果 pi=−1pi=−1,表示根节点。 数据保证所有物品构成一棵树。

输出格式

输出一个整数,表示最大价值。

数据范围

1≤N,V≤1001≤N,V≤100
1≤vi,wi≤1001≤vi,wi≤100

父节点编号范围:

  • 内部结点:1≤pi≤N1≤pi≤N;
  • 根节点 pi=−1pi=−1;

代码:


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class four {static int num,bag;static int bags[][]=new int[1010][1010],v[]=new int[1010],w[]=new int[1010];public static void dfs(int root ,List list[]){for (int i=v[root];i<=bag;i++){bags[root][i]=w[root];}for (int i=0;i<list[root].size();i++){int y= (int) list[root].get(i);dfs(y,list);for (int j=bag;j>=v[root];j--){for (int k=0;k<=j-v[root];k++){bags[root][j]=Math.max(bags[root][j],bags[root][j-k]+bags[y][k]);}}}}public static void main(String[] args) {List list[]=new List[1010];Scanner scanner=new Scanner(System.in);num=scanner.nextInt();bag=scanner.nextInt();for (int i=0;i<=num;i++){list[i]=new ArrayList();}int root=0,k;for (int i=1;i<=num;i++){v[i]=scanner.nextInt();w[i]=scanner.nextInt();k=scanner.nextInt();if (k==-1) root=i;else list[k].add(i);}dfs(root,list);System.out.println(bags[root][bag]);}
}

有依赖的背包问题--java相关推荐

  1. java文件编译_【java】javac编译多个有依赖关系的java文件为class文件

    历史文章: [javac命令不能使用,提示不是内部命令或外部命令,请查看历史文章] =================需求说明========================== 之前的文章中,仅说明 ...

  2. 九大背包问题专题--有依赖的背包问题(树形Dp结合)

    9.有依赖的背包问题 问题: 有N件物品和一个容量是V的背包. 物品之间具有依赖关系,且依赖关系组成一棵树的形状.如果选择一个物品,则必须选择它的父节点. 如图所示 如果选择物品5,则必须选择物品1和 ...

  3. Consumer HDU - 3449【dp-有依赖的背包问题】

    题意简述: FJ打算去购物,在此之前,他需要一些盒子来装他要买的各种各样的东西.每个盒子都用来携带一些特定的东西(也就是说,如果他要买这些东西,他必须事先买到盒子).每种东西都有自己的价值.现在FJ的 ...

  4. 各种背包详解(自己总结) 金明的预算和LOL(可依赖的背包问题)

    在讲可依赖背包之前先回顾下背包九讲的内容,现在做dp多了发现背包问题真的是dp的鼻祖,好多种问题都是基于背包的模型发展而来,就是不是基于背包的,把背包搞懂也有利于你自己学习dp,以此来想到其它状态转移 ...

  5. 依赖的背包问题(c++)

    该博客主要是对于Acwing上题解的一个解释与记录 贴上大佬的题解,感谢da AcWing 10. 有依赖的背包问题(思路不同于dxc,但是个人感觉更好理解) - AcWing 有 NN 个物品和一个 ...

  6. 有树形依赖的背包问题(附代码注释)

    有 NN 个物品和一个容量是 VV 的背包. 物品之间具有依赖关系,且依赖关系组成一棵树的形状.如果选择一个物品,则必须选择它的父节点. 如下图所示: 如果选择物品5,则必须选择物品1和2.这是因为2 ...

  7. Java减少依赖_去掉JAVA部分依赖的事例

    一.现象 最近做JAVA项目,需要依赖一个外部的JAR包,但是依赖之后,发现eclipse一直workspace,估计是包重复加载的问题 二.问题 使用查看包依赖的命令:mvn dependency: ...

  8. 不依赖jstack的java 线程dump和死锁检查工具

    java线程dump可以使用jdk的命令"jstack  pid"完成,死锁检查可以用jconsole查看到.这两个工具是java调试的常用方法. 我遇到的问题是:在sles11s ...

  9. JavaCV依赖精简(Java OpenCV依赖精简)

    1.什么是opencv? OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可 ...

最新文章

  1. Ant Design Pro 登录流程以及路由权限设置
  2. Ubuntu 修改截屏快捷键
  3. java 有序列表_关于算法:在Java中为列表列表生成唯一的有序非重复组合
  4. mysql如何开启对外连接?
  5. 【matlab】直方图均衡化
  6. Nginx 404 500
  7. 通过web的方式动态查看tomcat的catalina.out的日志(web.py)
  8. 20200125每日一句
  9. 【Java篇】 Java小游戏中加入背景音乐
  10. ArcGIS求局部空间自相关
  11. 对于分布式消息队列我有话说
  12. 正态分布、指数分布的特征函数及期望与方差 - 随机过程
  13. OpenCV学习之Canny算法自实现
  14. springboot注解实现自动插入创建时间和更新时间到数据库
  15. PageHelper介绍
  16. layui模仿element ui_比较受欢迎的前端 UI 框架【vue】
  17. OCR-Tesseract系列学习——Tesseract for Linux下载与安装
  18. PlaySound函数
  19. Java -Xms -Xmx -Xss -XX:MaxNewSize -XX:MaxPermSize含义记录
  20. 暴力破解zip加密压缩包

热门文章

  1. CS231n学习记录Lec8 Training训练神经网络(下)
  2. IC设计笔试面试经典100题(大部分有答案)
  3. python:实现二进制转十六进制算法(附完整源码)
  4. 打造现代医药物流面临的挑战及应对措施
  5. 百度快速收录神器 新站长SEO工具
  6. 亚马逊云服务器密钥修改,更改EC2实例的密钥对
  7. axios 发送 header 并且设置允许跨域
  8. VML极道教程(一) VML介绍
  9. APEX包管理器简述(一)
  10. 继推出科创板,证监会将统筹推进新三板创业板改革