Acwing.285 没有上司的舞会(动态规划)

news/2024/7/5 8:04:42

题目

Ural大学有N名职员,编号为1~N。
他们的关系就像—棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数H给出,其中1≤i≤N。
现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。
在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。

输入格式

第一行一个整数N。
接下来N行,第i行表示i号职员的快乐指数H;。
接下来N-1行,每行输入—对整数L,K,表示K是L的直接上司。最后一行输入0,0。

输出格式

输出最大的快乐指数。

数据范围

1<N<6000,—128<Hi≤127

  • 输入样例:
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
  • 输出样例:
5

题解

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author akuya
 * @create 2023-07-28-21:52
 */
public class ball {
    static int N=6010;
    static int n;
    static int happy[]=new int[N];
    static int h[]=new int[N];
    static int e[]=new int[N];
    static int ne[]=new int[N];
    static int idx;
    static int f[][]=new int[N][2];
    static boolean has_father[]=new boolean[N];

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        for(int i=1;i<=n;i++)happy[i]=scanner.nextInt();

        Arrays.fill(h,-1);
        for(int i=0;i<n-1;i++){
            int a,b;
            a=scanner.nextInt();
            b=scanner.nextInt();
            has_father[a]=true;
            add(b,a);
        }

        int root=1;
        while(has_father[root])root++;
        dfs(root);
        System.out.println(Math.max(f[root][0],f[root][1]));
    }

    public static void add(int a,int b){
        e[idx]=b; ne[idx]=h[a];h[a]=idx++;
    }

    public static void dfs(int u){
        f[u][1]=happy[u];
        for(int i=h[u];i!=-1;i=ne[i]){
            int j=e[i];
            dfs(j);

            f[u][0]+=Math.max(f[j][0],f[j][1]);
            f[u][1]+=f[j][0];
        }
    }
}

思路

本题为树形动态规划,思路如下图
在这里插入图片描述
在这里插入图片描述
动态转移方程如上图,结合之前学习的静态链表即可完成。


http://lihuaxi.xjx100.cn/news/1386446.html

相关文章

【JS 阻止滑动穿透】

在实现阻止滑动穿透时&#xff0c;可以使用以下方法之一&#xff1a; 使用 CSS 属性 overflow: hidden 来禁止页面滚动。 body {overflow: hidden; }使用 JavaScript 监听滚动事件并阻止默认行为。 document.addEventListener(touchmove, function(e) {e.preventDefault(); …

【LeetCode】139.单词拆分

题目 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s "leetcode", wordD…

使用Jetpack Compose和Motion Layout创建交互式UI

使用Jetpack Compose和Motion Layout创建交互式UI 通过阅读本博客&#xff0c;您将学会使用Motion Layout实现这种精致的动画效果&#xff1a; 让我们从简单的介绍开始。 介绍 作为Android开发者&#xff0c;您可能会遇到需要布局动画的情况&#xff0c;有时甚至需要变形样…

ENVI提取NDVI与植被覆盖度估算

目标是通过ENVI计算植被覆盖度结合ArcGIS出图得到植被覆盖图。 一、植被覆盖度的定义: 植被覆盖度( FractionalVegetation Cover,FVC) 通常定义为植被( 包括叶、茎、枝) 在地面的垂直投影面积占统计区总面积的百分比,它量化了植被的茂密程度,反应了植被的生长态势,是刻画…

Ubuntu18.04安装Autoware1.15(解决Openplanner无法绕障的问题:Openplanner2.5)

文章目录 一、下载Autoware1.15源码二、安装依赖三、修改CUDA版本四、编译以及报错解决编译&#xff08;1&#xff09;报 undefined reference to cv::Mat::Mat() 的错就按照下面方式改相应包&#xff1a;&#xff08;2&#xff09;遇到OpenCV的CV_RGB、IplImage报错&#xff1…

6.修饰符

文章目录 6.1 在一个静态方法内调用一个非静态成员为什么是非法的?6.2 静态方法和实例方法有何不同 6.1 在一个静态方法内调用一个非静态成员为什么是非法的? 由于静态方法可以不通过对象进行调用&#xff0c;因此在静态方法里&#xff0c;不能调用其他非静态变量&#xff0…

JSON格式Python,Java,PHP等封装获取淘宝商品详情SKU数据API方法

淘宝是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝天猫商品详情SKU详细数据&#xff0c;您可以通过开放平台的接口或者直接访问淘宝天猫商城的网页来获取商品详情Sku信息。以下是两种常用方法的介绍&…

基于java SpringBoot和HTML的博客系统

随着网络技术渗透到社会生活的各个方面&#xff0c;传统的交流方式也面临着变化。互联网是一个非常重要的方向。基于Web技术的网络考试系统可以在全球范围内使用互联网&#xff0c;可以在本地或异地进行通信&#xff0c;大大提高了通信和交换的灵活性。在当今高速发展的互联网时…