zoukankan      html  css  js  c++  java
  • 二叉苹果树

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=107;
     6 int map[maxn][maxn],l[maxn],r[maxn],a[maxn],f[maxn][maxn];
     7 int n,q;
     8 void buildtree(int u){
     9     for(int i=1;i<=n;i++){
    10         if(map[u][i]!=-1){
    11             l[u]=i;a[i]=map[u][i];
    12             map[u][i]=-1;map[i][u]=-1;
    13             buildtree(i);
    14             break;
    15         }
    16     }
    17     for(int i=1;i<=n;i++){
    18         if(map[u][i]!=-1){
    19             r[u]=i;a[i]=map[u][i];
    20             map[u][i]=-1;map[i][u]=-1;
    21             buildtree(i);
    22             break;
    23         }
    24     }
    25 }
    26 int DP(int i,int j){
    27     if(j==0) return f[i][j]=0;
    28     if(l[i]==0&&r[i]==0) return f[i][j]=a[i];
    29     if(f[i][j]>0) return f[i][j];
    30     for(int k=0;k<=j-1;k++)
    31         f[i][j]=max(f[i][j],DP(l[i],k)+DP(r[i],j-k-1)+a[i]);
    32     return f[i][j];
    33 } 
    34 int main(){
    35     cin>>n>>q;
    36     memset(map,-1,sizeof(map));
    37     for(int i=1;i<n;i++){
    38         int u,v,w;cin>>u>>v>>w;
    39         map[u][v]=w;map[v][u]=w;
    40     } 
    41     buildtree(1);
    42     int ans=DP(1,q+1);
    43     cout<<ans<<endl;
    44     return 0;
    45 } 
  • 相关阅读:
    Android相关sdk使用
    Uniscribe文字自动换行
    Chrome RenderText分析(2)
    c++智能指针
    codepage IMLangCodePages
    GUI 快捷键的实现思路
    买车险
    九年---祝爱永存!
    算法
    Windows内核安全与驱动开发
  • 原文地址:https://www.cnblogs.com/lcan/p/9513636.html
Copyright © 2011-2022 走看看