zoukankan      html  css  js  c++  java
  • Timus 1018 Binary Apple Tree

    http://acm.timus.ru/problem.aspx?space=1&num=1018

    类型:树dp

    AC Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 int a[105][105],val[105]={0},tree[105][3],f[105][105],n;
     6 void buildtree(int root)
     7 {
     8     int lr=0;
     9     for(int i=1;i<=n;i++)
    10     if(a[root][i]>0){
    11         if(lr==2)
    12         return;
    13         lr++;
    14         tree[root][lr]=i;
    15         val[i]=a[root][i];
    16         a[i][root]=-1;
    17         buildtree(i);
    18     }
    19 }
    20 void dfs(int root,int num)
    21 {
    22     if(num==0){
    23         f[root][num]=0;
    24         return;
    25     }
    26     else if(tree[root][1]==0&&tree[root][2]==0){
    27         f[root][num]=val[root];
    28         return;
    29     }
    30     else{
    31         for(int i=0;i<num;i++){
    32             if(f[tree[root][1]][i]==0)dfs(tree[root][1],i);
    33             if(f[tree[root][2]][num-1-i]==0)dfs(tree[root][2],num-1-i);
    34             f[root][num]=max(f[root][num],f[tree[root][1]][i]+f[tree[root][2]][num-1-i]+val[root]);
    35             //if(root==1&&num==3)
    36             //printf("f=%d\n",f[1][3]);
    37         }
    38     }
    39 }
    40 void print()
    41 {
    42     for(int i=1;i<6;i++)
    43     printf("%d %d \n",tree[i][1],tree[i][2]);
    44     printf("\n");
    45     for(int i=1;i<6;i++)
    46     printf("%d\n",val[i]);
    47     printf("\n");
    48 }
    49 int main()
    50 {
    51     int m;
    52     scanf("%d%d",&n,&m);
    53     memset(a,0,sizeof(a));
    54     memset(val,0,sizeof(val));
    55     memset(f,0,sizeof(f));
    56     memset(tree,0,sizeof(tree));
    57     for(int i=1;i<n;i++){
    58         int xx,yy,val;
    59         scanf("%d%d%d",&xx,&yy,&val);
    60         a[xx][yy]=val;
    61         a[yy][xx]=val;
    62     }
    63     buildtree(1);
    64     //print();
    65     dfs(1,m+1);
    66     printf("%d\n",f[1][m+1]);
    67     return 0;
    68 }
  • 相关阅读:
    flex
    两端对齐
    background-clip、background-origin、box-sizing
    animation
    transform translate transition 的区别
    如何将页脚固定在页面底部
    normalize.css
    使用 Swift 制作一个新闻通知中心插件(1)
    在 App 扩展和主 App 间共享数据
    asp.net core Cookie认证
  • 原文地址:https://www.cnblogs.com/kim888168/p/3006187.html
Copyright © 2011-2022 走看看