树形动态规划 java_树形动态规划

news/2024/7/16 7:48:08 标签: 树形动态规划 java

我颓了

今天复习一下树形DP

一道简单的入门树形DP

代码如下

#include

#include

#include

using namespace std;

const int maxn=10007;

int dp[maxn][2];

bool f[maxn][2];

int v[maxn];

int cnt[maxn];

int son[maxn][maxn];

int fa[maxn];

int work(int a,int b) //记忆化搜索

{

if(f[a][b]){

return dp[a][b];

}

f[a][b]=true;

int sum=0;

if(b==1){ //取这个点

for(int i=1;i<=cnt[a];i++){

int u=son[a][i];

sum+=work(u,0); //不能取这个节点的儿子(下司)

}

dp[a][b]=v[a]+sum; //这个点的最优利益就是所有它的下司都不去的最大利益之和与它本身快乐值的利益之和

}

else{

for(int i=1;i<=cnt[a];i++){

int u=son[a][i];

sum+=max(work(u,0),work(u,1)); //下司可去可不去,在去与不去中取最大值

}

dp[a][b]=sum; //这个点的最优利益就是所有它的下司去与不去的最大利益之和

}

return dp[a][b];

}

int main()

{

int n;

cin>>n;

for(int i=1;i<=n;i++){

cin>>v[i];

}

for(int i=1;i<=n;i++){

int k,l;

cin>>l>>k;

son[k][++cnt[k]]=l;

fa[l]++;

}

int s;

for(int i=1;i<=n;i++){

if(!fa[i]){

s=i; //找到最大的上司,作为根节点开始搜索

}

}

int ans=max(work(s,0),work(s,1)); //在取根节点与不取根节点中取最大值

cout<

}

总结:树形动态规划就是在树上做的动态规划,例题一就是一道基本的树形动态规划题目,主要注意画图分析

eg2.垃圾陷阱


http://www.niftyadmin.cn/n/834166.html

相关文章

java httpsession_JavaWeb:HttpSession

环境JDK 8Spring Tool Suite 4.6.1Servlet 3.1Tomcat 8.5Maven 3.6.3HttpSession 说明HttpSession 总共有 17 个方法&#xff0c;其中 5 个方法已过期。Attribute 系列方法和 ServletContext、HttpServletRequest 类似&#xff0c;只不过作用域是整个会话。public Object getAt…

猜字游戏java_java程序,猜字游戏,希望大神帮忙

田心枫package com.may.eighteen;import java.util.Random;import java.util.Scanner;public class WeekDemo1 {public static void main(String[] args) {int number new Random().nextInt(200) 1;System.out.println("有一个数&#xff0c;在1-200之间。猜猜看&#x…

java vm文件_JavaVM执行的操作包括()。

案例分析一&#xff1a;假定CPU的主频是500MHz。硬盘采用DMA方式进行数据传送&#xff0c;其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过。如果CPU在DMA初始化设置和启动硬盘操作等方面用了1000个时钟周期&#xff0c;并且在DMA传送完成后的中断…

华南理工深度学习与神经网络期末考试_深度学习不再是炼丹术!谷歌给出首个神经网络训练理论证明...

【新智元导读】谷歌 AI 最新发布的一篇论文给出了首个关于深度神经网络训练相关的理论证明&#xff0c;实验观察结果也为初步解释梯度下降强于贝叶斯优化奠定了基础。神经网络的理论面纱&#xff0c;正逐步被揭开。原来&#xff0c;神经网络实际上跟线性模型并没那么大不同&…

java应用程序异常_java – 系统异常与应用程序异常的清楚说明

当出现业务逻辑错误(而不是系统错误)时&#xff0c;应抛出应用程序异常。有一个重要的区别&#xff1a;应用程序异常不会自动导致事务回滚。客户端有机会在抛出应用程序异常后进行恢复。应用程序异常发送到客户端&#xff0c;而不会重新打包为EJBException。因此&#xff0c;您…

code 搭建java_VSCode搭建java开发环境

VSCode搭建java开发环境1:在 Visual Studio Code 中打开扩展视图(CtrlShiftX)&#xff0c;输入关键词java、spring分别下载Java开发插件包和springboot插件包2:配置参数 点击设置按钮&#xff0c;进入设置选项&#xff0c;配置用户设置(文件->首选项->设置 Ctrl,){&quo…

java反射路径_java反射

什么是反射&#xff1f;反射是在java程序运行过程中&#xff0c;对于任意的类&#xff0c;都能获取类的属性和方法&#xff0c;可以调用他的任意方法和构造函数&#xff0c;对属性进行赋值&#xff0c;这种机制我们称之为反射。反射理解理解反射之前&#xff0c;我们需要了解类…

java四窗口售票_Java多线程窗口售票问题实例

本文介绍了多线程实现多个窗口售票问题的两种枷锁方式&#xff0c; 分别是synchronized 和lock()和unlock()具体代码如下&#xff1a;第一种&#xff1a;package runnable;import java.util.concurrent.locks.lock;import java.util.concurrent.locks.reentrantlock;/** 同步* …