zoukankan      html  css  js  c++  java
  • 树形dp

    入门:

    题意:杭电1520

    先输入n个人,接下来n行输入他们的快乐值,再接下来输入一些数对<a,b>,表示b是a的上司(别看反了)!

               要求直属上司和员工不能同时出席宴会,求宴会最大的快乐值。

     
     
    import java.util.*;
    
    public class Main8 {
     static Vector<int[]>v=new Vector<int[]>();
     static int par[]=new int[6001];
     static int son[]=new int[6001];
     static int dp[][]=new int[6001][2];
     static int vis[]=new int[6001];
     static int n;
             public static void dfs(int root){
                 vis[root]=1;
                 for(int i=1;i<=n;i++){
                     if(vis[i]==0&&par[i]==root){
                         dfs(i);
                         dp[root][1]+=dp[i][0];
                         dp[root][0]+=Math.max(dp[i][0], dp[i][1]);
                     }
                 }
             }
     
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                 n = sc.nextInt();
                int a ,b;
                for(int i=1;i<=n;i++)
                    dp[i][1]=sc.nextInt();
                while(true){
                     a= sc.nextInt();
                     b = sc.nextInt();
                     if(a==0&&b==0)
                         break;
                    son[a]++;
                    par[a]=b;
                     
                }
                for(int i=1;i<=n;i++){
                    if(son[i]==0){
                        a=i;           //找到根节点
                        break;
                    }
                }
                dfs(a);
                System.out.println(Math.max(dp[a][0], dp[a][1]));
            }
        }
  • 相关阅读:
    算法第五章作业
    第四章实验报告
    算法第三章作业
    算法第三章上机实验报告
    算法第二章作业
    算法第二章上机实践报告
    算法 代码规范(C++)&《数学之美》读后感
    第七章学习小结
    第六章学习小结
    第五章学习小结
  • 原文地址:https://www.cnblogs.com/ls-pankong/p/10556069.html
Copyright © 2011-2022 走看看