树型dp和博弈型dp问题

本文探讨了两种动态规划的特殊类型——树型动态规划和博弈型动态规划。树型dp主要解决在树状结构上的最优化问题,而博弈型dp则常用于解决两人零和博弈的问题,寻找最优策略。通过深入理解这两种dp的应用场景和解题思路,有助于提升复杂问题的求解能力。
摘要由CSDN通过智能技术生成

1. 树型dp.

package com.sata.dp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class TreeDp {
    /**
     * 圣诞party
     * Description
     *
     * 圣诞节马上就要来了,为了带动节日氛围并营造一个难得的交(tu)流(cao)机会,本部门3位很会浪的同事决定在外面包一个豪华别墅,并组织邀请部门同事一起轰趴欢度。
     *
     * 为了避免场面过于火爆,交(tu)流(cao)过于激烈,出现尴尬的局面,组织者决定,不能同时邀请某位同事和他的直属老板同时参加该盛宴。如果把整个部门的组织架构画出来,可以形成一颗树状结构,也就是说,只能挑这颗“树”上的部分节点参加。
     *
     * 为了进一步提升活动的效果,增强友谊,防止出现意外的言论,组织者决定尽可能邀请友好度较高的同事参加。于是他们开了一个周末的会,把部门所有同事都讨论了一遍,并且根据他们的观察,给每位同事打了一个友好分值。
     *
     * 那么组织者剩下的问题就是想在这个大树上,在上述限制条件下,邀请尽可能多的同事参加,并使得友好分值总和尽可能大。于是他们找到了你,希望你能帮他们解决这个问题并告诉他们最高可以能得多少分。
     *
     * 我们已经对数据进行了处理,从0开始顺序编码,每个同事都有一个ID。
     *
     *
     * Input
     * 输入包含三行:
     *
     * 第一行,N,表示同事总数,不超过1000。
     *
     * 第二行,N个正整数(0~100)之间,按ID顺序表示这n个同事的友好度分数,
     *
     * 第三行,N个整数(-1~N-1),按ID顺序表示此同事的上级ID,最大老板的上司ID为-1。
     *
     *
     * Output
     * 输出一个数字,最大值
     *
     *
     * Sample Input 1
     *
     * 7
     * 1 1 1 1 1 1 1
     * 2 2 4 4 -1 3 3
     * Sample Output 1
     *
     * 5
     * @param args
     */
    /**
     * 树形dp,员工之间的上下级关系hierarchy天然形成了一个tree, 相邻层级之间的节点存在互斥关系,标记每个node的两个状态:select/not select.
     * @param args
     */
    public static void main(String[] args) {
        int total = 0;
        try {
            total = Reader.nextInt();

            List<Integer> scores = new ArrayList<>();
            List<Integer> bosses 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值