hdu 1011 Starship Troopers (依赖背包 树形dp)

2024-08-30 03:08

本文主要是介绍hdu 1011 Starship Troopers (依赖背包 树形dp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

        链接:点击打开链接

题意:

        n个房间组成一棵树,你有m个战队,从1号房间开始依次clear每个房间,在每个房间需要花费的战队个数是bugs/20,得到的价值是the possibility of capturing a brain,求最大的价值。

算法:

       树形dp,有依赖的背包问题。(依次clear每个房间)

思路:

        状态转移dp[i][j]表示根结点为i时(房间i)花费j个战队能够得到的最大价值(捕捉到一个brain最大的可能值)。递归求出每个根结点处的最大值,最后dp[1][m]就是答案。

代码:

/*树型dp*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 110struct Node
{int num;int p;
} node[MAXN];int n,m;
int dp[MAXN][MAXN];//dp[i][j]表示根结点为i(房间i)时,用j个战队能够捕捉一个brain最大的可能值
int vis[MAXN];
int tree[MAXN][MAXN];//存树void dfs(int root)
{int numm = (node[root].num+19)/20;vis[root] = 1;for(int i=numm; i<=m; i++)//初始化dp[root][i] = node[root].p;for(int i=1; i<=tree[root][0]; i++){int u = tree[root][i];if(vis[u])dfs(u);for(int j=m; j>=numm; j--)//01背包处理(转化为物品组,按分组背包){for(int k=1; k+j<=m; k++){if(dp[u][k])dp[root][j+k] = max(dp[root][j+k],dp[root][j]+dp[u][k]);}}}
}int main()
{//freopen("input.txt","r",stdin);int a,b;while(scanf("%d%d",&n,&m) != EOF && (n!=-1 || m!=-1)){memset(dp,0,sizeof(dp));memset(vis,0,sizeof(vis));memset(tree,0,sizeof(tree));for(int i=1; i<=n; i++)scanf("%d%d",&node[i].num,&node[i].p);for(int i=1; i<=n-1; i++){scanf("%d%d",&a,&b);tree[a][0]++;tree[a][tree[a][0]] = b;tree[b][0]++;tree[b][tree[b][0]] = a;}if(m == 0)printf("0\n");else{dfs(1);printf("%d\n",dp[1][m]);}}return 0;
}

---------------------------------------------------------------------------------

        我还没有理解依赖背包问题的解法和思路,看了别人的还是不能够领悟,真是菜菜菜啊~~~~~~代码来自点击打开链接

-----------------------------------------------------------------------------------------------------

战斗,永不停歇。。。。。。。。我对今天的态度就是对我一生的态度。。。。。

这篇关于hdu 1011 Starship Troopers (依赖背包 树形dp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119627

相关文章

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以