zoukankan      html  css  js  c++  java
  • [poj2342]Anniversary party_树形dp

    Anniversary party poj-2342

        题目大意:没有上司的舞会原题。

        注释:n<=6000,-127<=val<=128.

          想法:其实就是最大点独立集。我们介绍树形dp

            树形dp就是以节点或者及其子树为信息,进行动态规划。用dfs的原理,遍历,在回溯是更新父亲节点。

          然后,关于这道题,我们就可以对于每一个节点进行标记,然后对于满足条件的节点进行遍历。设状态就是两个dp,分别表示选当前根节点和不选当前根节点。更新是瞎jb更新即可... ....

        最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int father[6005],vis[6005],dp[6005][2],t;
    void dfs(int node)
    {
        vis[node] = 1;
        for(int i=1;i<=t;i++)
        {
           if(!vis[i]&&father[i]==node)
           {
               dfs(i);
               dp[node][1]+=dp[i][0];
               dp[node][0]+=max(dp[i][0],dp[i][1]);
           }
        }
    }
    
    int main()
    {
        int l,k,root;
        while(~scanf("%d",&t))
        {
            for(int i=1;i<=t;i++)
            scanf("%d",&dp[i][1]);
            root=0;
            while(scanf("%d%d",&l,&k),l+k>0)
            {
                father[l]=k;
                root=k;
            }
            memset(vis,0,sizeof(vis));
            dfs(root);
            printf("%d
    ",max(dp[root][1],dp[root][0]));
        }
    
        return 0;
    }
    

         小结:对于树形dp的路还有很长... ...

  • 相关阅读:
    vue--路径前面的@的意思
    格式化规则修改prettierrc
    windows快捷键
    使用npm 添加less之后报错
    IOS中如何提高UITableView的性能?
    ffmpeg解码h264 Increasing reorder buffer
    Chrome浏览器关联文件图标空白问题解决方案
    mysql 问题sql 截图
    1、HR需要哪些自我提升
    1、文案职业大揭秘
  • 原文地址:https://www.cnblogs.com/ShuraK/p/8527412.html
Copyright © 2011-2022 走看看