树形dp例题2

洛谷p2015绿

题意:有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有 N个结点(叶子点或者树枝分叉点),编号为 1∼𝑁,树根编号一定是 1。现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住多少苹果。

分析:写出状态转移方程fx=max(fx,fj+fx) 。j是儿子。直接让他们初始为applei就行了,后面就不用加了。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,v;
int edge[1000],ne[1000],apple[1000],last[1000],f[1000][1000],cnt=1;
void s(){for(int i=1;i<=n;i++)last[i]=-1;
}
void add(int a,int b,int v){edge[cnt]=b;ne[cnt]=last[a];apple[cnt]=v;last[a]=cnt++;
}
void dfs(int x,int y){for(int i=last[x];i>=1;i=ne[i]){int j=edge[i];//j是i的儿子;if(j==y)continue;f[j][1]=apple[i];//存储子节点到父节点的值 dfs(j,x);//进入下一层搜索for(int z=m;z>=1;z--){for(int k=0;k<=z;k++){if((k!=z&&z!=1)||x==1)f[x][z]=max(f[x][z],f[j][k]+f[x][z-k]);}}}
}
int main(){cin>>n>>m;s();for(int i=1;i<n;i++){cin>>a>>b>>v;add(a,b,v);//a是i的父亲节点add(b,a,v);}dfs(1,0);cout<<f[1][m];
}

洛谷p1270蓝

题意:第一行是警察赶到的时间,以秒为单位。第 2行描述了艺术馆的结构,是一串非负整数,成对地出现:每一对的第一个数是走过一条走廊的时间,第 2 个数是它末端的藏画数量;如果第 2个数是 0,那么说明这条走廊分叉为两条另外的走廊.

分析:用dfs+树形dp。建树,然后dfs搜到底,用dp求出偷到的画

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
​
const int maxn=20005;   //空间开大点 
​
struct edge{int v,w,next;
}e[maxn];
int head[maxn],cnt;
​
void add(int u,int v,int w){    //存边 e[++cnt].v=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt;
}
​
int n,tot,root,ans;
int dp[maxn][maxn]; //dp[i][j]表示以i为根的子树,消耗j秒能拿到的画的最大值 
int size[maxn];
​
void insert(int x,int fa){  //建图 int time,pic;           //上个点走到这个点的时间 ,这个点画的数量  scanf("%d %d",&time,&pic);add(fa,x,time<<1);      //将父结点连到该节点 if(!pic){           //分成两条路 insert(++tot,x);    //tot是结点序号 insert(++tot,x);}else{               //叶子节点 while(pic--)        //每有一幅画,连一条边到0号结点 add(x,0,5);}
}
void dfs(int u){for(int i=head[u];i;i=e[i].next){int v=e[i].v,w=e[i].w;dfs(v);size[u]+=size[v]+w;for(int j=min(n,size[u]);j>=w;j--)  //j秒的时间在u子树 for(int k=0;k<=min(j-w,size[v]);k++)  //k秒的时间走到v子树dp[u][j]=max(dp[u][j],dp[u][j-k-w]+dp[v][k]);}
}
int main(){scanf("%d",&n);n--;root=tot=1;insert(++tot,root); //以root=1为起始节点 dp[0][0]=1;dfs(root);for(int i=1;i<n;i++)ans=max(ans,dp[root][i]);printf("%d",ans);return 0;
}

P3360 偷天换日(蓝)

题意:艺术馆由若干个展览厅和若干条走廊组成。每一条走廊的尽头不是通向一个展览厅,就是分为两个走廊。每个展览厅内都有若干幅画,每副画都有一个价值。经过走廊和偷画都是要耗费时间的。警察会在 n 秒后到达进口,在不被逮捕的情况下你最多能得到的价值。

分析:如果x是0,就合并两棵树,并求背包dp,否则就开始偷画,偷画也要时间,用dp算最多能偷多少画。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+20;
ll n,tot=1;
ll dp[N][N],w[N],c[N];
void dfs(int now){ll t,x;cin>>t>>x;t<<=1;if(x){for(ll i=1;i<=x;i++){cin>>w[i]>>c[i];}for(ll i=1;i<=x;i++){for(ll j=n;j>=c[i];j--){//背包容量 if(j-c[i]>=t)dp[now][j]=max(dp[now][j],dp[now][j-c[i]]+w[i]);}//cout<<dp[now][n];}return;}//如果x为0 ll l=++tot;dfs(tot);ll r=++tot;dfs(tot);//合并左右子树的状态 for(ll i=t;i<=n;i++){for(ll j=0;j<=i-t;j++){dp[now][i]=max(dp[now][i],dp[l][j]+dp[r][i-t-j]); }} 
}
int main(){cin>>n;n--;dfs(1);cout<<dp[1][n];return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql语法介绍

MySQL 语法主要基于 SQL&#xff08;Structured Query Language&#xff09;标准&#xff0c;用于管理和操作关系型数据库。以下是一些基本的 MySQL 语句&#xff1a; 1.创建数据库&#xff1a; CREATE DATABASE database_name; 1.选择数据库&#xff1a; USE database_name;…

WPF使用TouchSocket实现Tcp client

文章目录 前言1、页面展示2、主页面UI代码2、TCP client的UI代码3、Tcp client后台代码实现4、UI与后台代码的关联 前言 在该篇的Demo中&#xff0c;您可以找到以下内容&#xff1a; 1、TouchSocket的使用&#xff1b; 2、CommunityToolkit.Mvvm的使用&#xff1b; 3、AvalonD…

GPT-4o Mini:探索最具成本效益的小模型在软件开发中的应用

随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也取得了显著的进步。OpenAI 最新发布的 GPT-4o Mini 模型&#xff0c;以其卓越的性能和极具竞争力的价格&#xff0c;成为了广大开发者关注的焦点。作为一名长期关注人工智能及其在软件开发…

破局产品同质化:解锁3D交互式营销新纪元!

近年来&#xff0c;随着数字体验经济的蓬勃发展&#xff0c;3D交互式营销作为一种创新手段迅速崛起&#xff0c;它巧妙地解决了传统产品展示中普遍存在的缺乏差异性和互动性的问题&#xff0c;使您的产品在激烈的市场竞争中独树一帜&#xff0c;脱颖而出。 若您正面临产品营销…

【Python数据结构与算法】枚举----特殊密码锁

题目&#xff1a;特殊密码锁 描述 有一种特殊的二进制密码锁&#xff0c;由n个相连的按钮组成&#xff08;1<n<30&#xff09;&#xff0c;按钮有凹/凸两种状态&#xff0c;用手按按钮会改变其状态。 然而让人头疼的是&#xff0c;当你按一个按钮时&#xff0c;跟它相邻…

自定义协议(应用层协议)——网络版计算机基于TCP传输协议

应用层&#xff1a;自定义网络协议&#xff1a;序列化和反序列化&#xff0c;如果是TCP传输的&#xff1a;还要关心区分报文边界&#xff08;在序列化设计的时候设计好&#xff09;——粘包问题 1、首先想要使用TCP协议传输的网络&#xff0c;服务器和客户端都应该要创建自己…

无损放大图片工具

一、简介 1、Upscayl 是一款无损放大图片工具&#xff0c;支持CPU和GPU&#xff0c;扩图速度特别的快&#xff0c;而且效果特别的好。而且它有多种模型&#xff0c;比如说艺术动漫风格、真实风格、快速生成等等。最大支持16倍放大和亿级别像素&#xff0c;同时支持Windows、Mac…

Ruoyi-WMS本地运行

所需软件 1、JDK&#xff1a;8 安装包&#xff1a;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmlopen in new window 安装文档&#xff1a;https://cloud.tencent.com/developer/article/1698454open in new window 2、Redis 3.0 安装包&a…

Weakly Supervised Contrastive Learning 论文阅读

Abstract 无监督视觉表示学习因对比学习的最新成就而受到计算机视觉领域的广泛关注。现有的大多数对比学习框架采用实例区分作为预设任务&#xff0c;将每个实例视为一个不同的类。然而&#xff0c;这种方法不可避免地会导致类别冲突问题&#xff0c;从而损害所学习表示的质量…

QTreeWidget开放详解

QTreeWidget开放详解 一、创建 QTreeWidget二、QTreeWidget添加节点2.1 创建 QTreeWidget 和 添加顶级节点2.2 QTreeWidget向顶级节点添加子节点 二、 QTreeWidget处理信号和槽2.1 处理节点点击信号2.1 处理节点双击信号2.3 处理节点展开和折叠信号 三、QTreeWidget右键菜单四、…

鸿蒙应用框架开发【多HAP】程序框架

多HAP 介绍 本示例展示多HAP开发&#xff0c;简单介绍了多HAP的使用场景&#xff0c;应用包含了一个entry HAP和两个feature HAP&#xff0c;两个feature HAP分别提供了音频和视频播放组件&#xff0c;entry中使用了音频和视频播放组件。 三个模块需要安装三个hap包&#xff…

高性能响应式UI部件DevExtreme v24.1.4全新发布

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

Pycharm中提示:SDK is not defined for Run Configuration

此问题发生在使用Pycharm打开一个新的python的工程&#xff0c;结果总是提示XXX’时出错&#xff0c; SDK is not defined for Run Configuration 此问题&#xff0c;其实是个由于你的工程中没有设置python解释器导致的&#xff0c;解决的方案是&#xff1a; 找到运行->编…

Javascript前端面试基础4【每日学习并更新10】

同步和异步的区别 同步:浏览器访问服务器请求&#xff0c;用户看得到页面刷新&#xff0c;重新发请求等请求完&#xff0c;页面刷新,新内容出现&#xff0c;用户看到新内容,进行下一步操作异步:浏览器访问服务器请求&#xff0c;用户正常操作&#xff0c;浏览器后端进行请求。等…

玩游戏总缺少dll文件怎么办,免费修复DirectX方法

玩游戏或者运行程序时&#xff0c;突然蹦出个提示说“缺少xxxx.dll”&#xff0c;简直让人火大&#xff01;你是不是也遇到过这种情况&#xff0c;重新安装游戏也没用&#xff0c;各种错误提示让人崩溃&#xff1f;别急&#xff0c;阿星今天就来给你支个招&#xff0c;让这烦人…

电子签章-开放签应用

开放签电子签章系统开源工具版旨在将电子签章、电子合同系统开发中的前后端核心技术开源开放&#xff0c;适合有技术能力的个人 / 团队学习或自建电子签章 \ 电子合同功能或应用&#xff0c;避免研发同仁在工作过程中重复造轮子&#xff0c;降低电子签章技术研发要求&#xff0…

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…

7.25 阿里云OSS上传 + 后台返回token + 导出excel

1.阿里云Oss上传 只需要一点就是上传到云端后&#xff0c;前端调用上传文件接口&#xff0c;返回一个资源路径。 接着在提交表单时&#xff0c;前端把这个路径设置为img的参数即可。 1.1上传限制 只上传图片 Api("阿里云文件管理") CrossOrigin //跨域 RestContr…

算法 定长按组翻转链表

一、题目 已知一个链表的头部head&#xff0c;每k个结点为一组&#xff0c;按组翻转。要求返回翻转后的头部 k是一个正整数&#xff0c;它的值小于等于链表长度。如果节点总数不是k的整数倍&#xff0c;则剩余的结点保留原来的顺序。示例如下&#xff1a; &#xff08;要求不…

谷粒商城实战笔记-60-商品服务-API-品牌管理-效果优化与快速显示开关

文章目录 一&#xff0c;显示状态列改为switch开关二&#xff0c;监听状态改变 首先&#xff0c;把ESLint语法检查关掉&#xff0c;因为这个语法检查过于严格&#xff0c;在控制台输出很多错误信息&#xff0c;干扰开发。 在build目录下下webpack.base.conf.js中&#xff0c;把…