zoukankan      html  css  js  c++  java
  • P2014 选课

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int n,m;
     5 struct node{
     6     int lson,rson;
     7 }a[305];
     8 bool gotson[305];
     9 int dp[305][305],s[305];
    10 void DP(int rc,int rm)
    11 {//if一定要打,要不然会回到虚根导致dp错误
    12     if(dp[rc][rm]) return;
    13     if(a[rc].rson)
    14     DP(a[rc].rson,rm);
    15     dp[rc][rm]=dp[a[rc].rson][rm];
    16     for(int k=1;k<=rm;k++){
    17         if(a[rc].lson)
    18         DP(a[rc].lson,k-1);
    19         if(a[rc].rson)
    20         DP(a[rc].rson,rm-k);
    21         dp[rc][rm]=max(dp[rc][rm],dp[a[rc].lson][k-1]+dp[a[rc].rson][rm-k]+s[rc]);
    22     }
    23 
    24 }
    25 int main(void)
    26 {
    27     scanf("%d%d",&n,&m);
    28     for(int i=1,k;i<=n;++i)
    29     {
    30         scanf("%d%d",&k,s+i);
    31         if(gotson[k])
    32         {
    33             k=a[k].lson;
    34             while(a[k].rson) k=a[k].rson;//找最深的右儿子
    35             a[k].rson=i;
    36         }
    37         else {
    38             gotson[k]=1;a[k].lson=i;
    39         }//多叉转二叉树
    40     }
    41     DP(0,m+1);
    42     printf("%d",dp[0][m+1]);
    43 }
  • 相关阅读:
    62. Unique Paths (JAVA)
    60. Permutation Sequence (JAVA)
    56. Merge Intervals (JAVA)
    53. Maximum Subarray (JAVA)
    Java的volatile
    int和Integer的区别
    Java线程
    spark搭建部署
    spark源码编译
    Scala隐式转换和隐式参数
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11243507.html
Copyright © 2011-2022 走看看