首页 > 其他分享 >10. 有依赖的背包问题

10. 有依赖的背包问题

时间:2024-05-28 15:44:45浏览次数:25  
标签:10 背包 int 依赖 物品 nodes 节点

https://www.acwing.com/problem/content/10/

// 10. 有依赖的背包问题.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>


using namespace std;


/*
https://www.acwing.com/problem/content/10/

有 N 个物品和一个容量是 V 的背包。

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

如下图所示:
QQ图片20181018170337.png

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

每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。

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

输出最大价值。

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

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

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

数据范围
1≤N,V≤100
1≤vi,wi≤100
父节点编号范围:

内部结点:1≤pi≤N;
根节点 pi=−1;
输入样例
5 7
2 3 -1
2 2 1
3 5 1
4 7 2
3 6 2
输出样例:
11
*/

const int N = 105;
int dp[N][N];
int n, v;
struct NODE {
	int v, w, fa;
	vector<int> son;
}nodes[N];
int root; int ans;

/*
20 50
18 23 10
4 31 10
1 27 4
22 21 7
16 1 10
22 31 14
7 39 -1
25 16 3
2 40 8
7 44 3
3 10 3
21 45 8
20 29 19
11 17 4
20 46 18
14 48 13
9 48 8
15 21 3
5 30 3
10 32 18

*/

void dfs(int x) {
	for (int i = nodes[x].v; i <= v; i++) {
		dp[x][i] = nodes[x].w;
	}
	int currv = nodes[x].v;

	//以x为根节点能获取的最大获益
	for (auto e : nodes[x].son) {
		dfs(e);

		for (int i = v; i >= currv; i--) {
			int nextv = nodes[e].v;
			for (int j = nextv; i + j <= v; j++) {
				dp[x][i + j] = max(dp[x][i + j], dp[x][i] + dp[e][j]);
				if (x == root) {
					ans = max(ans, dp[x][i + j]);
				}
			}
		}
	}

	return;
}



void solve() {
	dfs(root);

	cout << ans << endl;
}

int main()
{
	cin >> n >> v;
	for (int i = 1; i <= n; i++) {
		cin >> nodes[i].v >> nodes[i].w >> nodes[i].fa;
		if (-1 == nodes[i].fa) {
			root = i;
		}
		else {
			nodes[nodes[i].fa].son.push_back(i);
		}
	}

	solve();


	return 0;
}

我的视频题解空间

标签:10,背包,int,依赖,物品,nodes,节点
From: https://www.cnblogs.com/itdef/p/18218165

相关文章

  • pr找不到msvcr110.dll无法执行代码怎么解决?总结7个有效方法分享
    msvcr110.dll是MicrosoftVisualC++2012Redistributable的一个组成部分,这是一个动态链接库(DLL)文件。它主要用于存储许多程序共同使用的代码和资源,对于执行C++编写的应用程序极为关键。如何打开软件提示找不到msvcr110.dll或msvcr110.dll丢失,则可能意味着它已被误删或因......
  • springboot~封装依赖引用包jar还是pom,哪种更规范
    将多个第三方包封装成一个项目后,如果你的目的是让其他开发人员可以直接引用这些依赖,一般来说有两种常见的方式:打成JAR包:将封装好的项目编译打包成JAR文件,其他开发人员可以将这个JAR文件添加到他们的项目中,并在项目的构建工具(比如Maven)中配置该JAR作为依赖。这样做的好处是简单......
  • CSP历年复赛题-P1179 [NOIP2010 普及组] 数字统计
    原题链接:https://www.luogu.com.cn/problem/P1179题意解读:统计l~r之间的整数包括多少个数字2。解题思路:枚举每一个数,对每一个数的每一位数字进行判断。100分代码:#include<bits/stdc++.h>usingnamespacestd;intl,r,ans;intmain(){cin>>l>>r;f......
  • 【漏洞扫描】HCL AppScan v10.5 高级版
    #简介HCLAppScan是一款广泛使用的应用程序安全性测试工具。它可以帮助组织识别和解决应用程序中存在的安全漏洞和弱点,从而提高应用程序的安全性。HCLAppScan支持多种应用程序类型,包括Web应用程序、移动应用程序和Web服务。#软件截图#安装教程文字教程点击类似于App......
  • 小米万兆路由器(AX10000)SimpleDocker部署alist+aria2,实现离线下载
     从镜像管理中拉取p3terx/aria2-pro和xhofe/alist: 输入镜像名称后点击OK,出现成功提示后关闭拉取窗口: 等镜像拉取完毕后,创建alist容器: 选择简单模式:alist容器参数:端口映射:5244:5244环境变量:PUID=0;PGID=0;UMASK_SET=022; 复制alist的宿主目录: 创建aria......
  • 什么?部署ClickHouse的服务器CPU利用率100%了?
    背景  某客户现场的ClickHouse所在服务器资源占用率100%了,引发了服务器告警。观察Grafana监控面板发现,从12点左右出现了大量的碎片写入,从而引起了相关指标的快速上升。  本文主要通过ClickHouse官方的系统表system.query_log表进行问题排查定位,结合Grafana监控面板最......
  • C++Primer Plus对象和类的练习,练习10.10类和对象 练习2默认参数和重载
    2.下面是一个非常简单的类定义:classPerson{private:staticconstLIMIT=25;stringlname;//Person’slastnamecharfname[LIMIT];//Person’sfirstnamepublic:Person()(lname=“”;fname[0]=0’;}//#1Person(conststring&ln,constchar*fn=“Heyyou”);//......
  • CSP历年复赛题-P1058 [NOIP2008 普及组] 立体图
    原题链接:https://www.luogu.com.cn/problem/P1058题意解读:在m*n的平面上,输出若干个立方体,每一个格子可以有高度不同的多个立方体。解题思路:此题咋一看来,无从下手,仔细分析,其实一道模拟题。如何模拟?我们一起来解决一下几个关键问题:1、如何画图?要在平面上输出图案,本质上就是将......
  • CSP历年复赛题-P1067 [NOIP2009 普及组] 多项式输出
    原题链接:https://www.luogu.com.cn/problem/P1067题意解读:模拟法依次输出多项式内容即可,但是需要考虑的周全,主要有以下关键点:1、系数为0时不输出多项式2、第一个符号,只有负号才输出3、次数不为0时,不输出为1的系数;次数为0时,输出所有系数4、次数为1时,不输出次数;次数为0时不输......
  • Windows10(家庭版)中DockerDesktop(docker)的配置、安装、修改镜像源、使用
    场景Windows10中Docker的安装与遇到的那些坑:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119209218上面讲DockerDesktop在windows10非家庭版上的安装,如果是家庭版,则需要执行如下步骤。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、虚拟化检......