• poj1192 最优连通子集(树形dp)


    题目链接:poj1192 最优连通子集
    0025A14E求一棵无向树的最大子树和。。类似于求最大子段和的办法,树形dp。

    dp[i][0]:以i为根,不包括 i 结点的子树最大权

    dp[i][1]:以i为根,包括 i 结点的子树的最大权

    dp[i][0] = max(dp[j][0] , dp[j][1])   (j 为 i 的儿子)

    dp[i][1] +=  dp[j][1] (dp[j][1] > 0,j 为 i 的儿子)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 #define CLR(a,b) memset((a),(b),sizeof((a)))
     6 using namespace std;
     7 const int N = 1001;
     8 const int inf = 0x3f3f3f3f;
     9 int n, cnt;
    10 int dp[N][2];
    11 int head[N];
    12 bool vis[N];
    13 struct edge{
    14     int nex, to;
    15 }e[N*N];
    16 struct point{
    17     int x, y, c;
    18 }p[N];
    19 void add(int u, int v){
    20     e[cnt].to = v;
    21     e[cnt].nex = head[u];
    22     head[u] = cnt++;
    23 }
    24 void dfs(int u){
    25     vis[u] = 1;
    26     dp[u][0] = 0;  dp[u][1] = p[u].c;
    27     for(int i = head[u]; ~i; i = e[i].nex){
    28         int v = e[i].to;
    29         if(!vis[v]){
    30             dfs(v);
    31             dp[u][0] = max(dp[u][0], max(dp[v][0], dp[v][1]));
    32             if(dp[v][1] > 0)
    33                 dp[u][1] += dp[v][1];
    34         }
    35     }
    36 }
    37 int main(){
    38     int i, j, ans;
    39     scanf("%d", &n);
    40     CLR(head, -1);  CLR(dp, 0);  CLR(vis, 0);
    41     cnt = 0;
    42     for(i = 1; i <= n; ++i){
    43         scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].c);
    44         for(j = 1; j < i; ++j){
    45             if(abs(p[i].x - p[j].x) + abs(p[i].y - p[j].y) == 1){
    46                 add(i, j); add(j, i);
    47             }
    48         }
    49     }
    50     dfs(1);
    51     ans = max(dp[1][0], dp[1][1]);
    52     printf("%d
    ", ans);
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    Python lambda函数
    python 获取日期
    <base>元素
    django--开发博客
    django修改时区,数据库
    django初探
    python创建虚拟环境
    资源记录页面
    组管理
    远程管理命令
  • 原文地址:https://www.cnblogs.com/GraceSkyer/p/5936002.html
Copyright © 2020-2023  润新知