树形DP,令res[i][j]表示以i为根的子树删除j条边所保留的最大苹果数;

res[i][j]=max(res[i][j],res[lChild][k]+res[rChild][j-k]+value[i]);(0<=j<=inum[i],0<=k<=inum[lChild])

inum[i]表示以i为根的子树树枝的个数,value[i]以i为端点的树枝的苹果树。

代码如下:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAX 123456789struct node{int value,lChild,rChild;};node nVert[101];struct Adta{int i,value,next;};Adta mVert[202];int res[101][101],head[101],visit[101],inum[101],N,n,m;int add(int s,int t,int w){    mVert[N].i=t;    mVert[N].value=w;    mVert[N].next=head[s];    head[s]=N;return N++;}int init(int i)//利用构造好的临界表重新建树{int j;    visit[i]=1;    nVert[i].lChild=nVert[i].rChild=0;for(j=head[i];j;j=mVert[j].next)if(!visit[mVert[j].i])        {if(nVert[i].lChild==0)             {                nVert[i].lChild=mVert[j].i;                nVert[mVert[j].i].value=mVert[j].value;                init(mVert[j].i);            }else if(nVert[i].rChild==0)            {                nVert[i].rChild=mVert[j].i;                nVert[mVert[j].i].value=mVert[j].value;                init(mVert[j].i);            }        }return 1;}int max(int a,int b){return a > b ? a : b;}int dfs(int i){int j,lc,rc,l;    lc=nVert[i].lChild;    rc=nVert[i].rChild;if(!lc && !lc)    {        res[i][0]=nVert[i].value;return res[i][1];    }if(lc) dfs(lc);if(rc) dfs(rc);for(j=0;j<n-m && j<=inum[i];j++)    {for(l=0;l<=j;l++)if(l<=inum[lc]+1 && j-l<=inum[rc]+1) res[i][j]=max(res[i][j],res[lc][l]+res[rc][j-l]+nVert[i].value);    }return res[i][n-m-1];}int GetInum(int i)//获取以i为根的子树的树枝数{if(!nVert[i].lChild && !nVert[i].rChild)    {return 0;    }if(nVert[i].lChild)        inum[i]+=GetInum(nVert[i].lChild)+1;if(nVert[i].rChild)        inum[i]+=GetInum(nVert[i].rChild)+1;return inum[i];}int main(){int i,s,t,w;while(scanf("%d %d",&n,&m)!=EOF)    {        N=1;        memset(head,0,sizeof(head));        memset(visit,0,sizeof(visit));        memset(res,0,sizeof(res));        memset(inum,0,sizeof(inum));for(i=1;i<n;i++)        {            scanf("%d %d %d",&s,&t,&w);            head[s]=add(s,t,w);            head[t]=add(t,s,w);        } inum[0]=-1;        init(1);        GetInum(1);        printf("%d\n",dfs(1));    }return 0;}

转载于:https://www.cnblogs.com/yu-chao/archive/2012/04/06/2434642.html

Timus 1018 树形DP相关推荐

  1. Ural 1018 (树形DP+背包+优化)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662 题目大意:树枝上间连接着一坨坨苹果(不要在意'坨'),给 ...

  2. 树形DP题目。。。转载

    树形DP http://acm.hdu.edu.cn/showproblem.php?pid=2196√ 向下搜一遍,向上搜一遍 http://acm.hdu.edu.cn/showproblem.p ...

  3. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  4. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  5. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  6. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  7. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  8. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  9. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

最新文章

  1. appium的demo编程
  2. 记最近Linux中遇到cpu使用率低loadavg高的分析过程
  3. html用bmob做留言,bmob js-sdk 在vue中的使用教程
  4. 二叉树题目----2 检查两颗树是否相同 和 对称二叉树的判定
  5. 单元素枚举类实现单例模式
  6. C语言和设计模式(享元模式)
  7. 小优机器人系统恢复_一种机器人异常恢复系统及方法与流程
  8. 关于android的日志输出LogCat
  9. python运维脚本面试_参加Linux运维面试时经常会被问到的shell脚本问题有哪些?
  10. 【Win10桌面美化】一个精致的程序员桌面是怎样的呢(花了一上午时间两种风格!)
  11. [浏览器插件]经典书签同步工具xmarks与chrome自带同步功能比较
  12. 一个网工的十年奋斗史 - 工作篇
  13. 【报告分享】头部DTC品牌增长案例库-易观智库零一裂变(附下载)
  14. 刘鹏教授在淮安市应急管理局作报告
  15. 《CS:GO》玩家快看,英特尔显卡驱动更新,帧率提升超两倍!
  16. Python制作的简单易学的猜单词小游戏
  17. 正交排列法、正交试验设计、正交表
  18. Linux命令+shell脚本大全:操作文件系统
  19. 双十一大促有哪些数码好物值得推荐?好用的数码好物清单表分享
  20. 微服务(一)—— 项目结构

热门文章

  1. 除非Window Activation Service(WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法启动网站。IIS 7
  2. js发送get、post请求的方法简介
  3. 【算法与数据结构】堆排序是什么鬼?
  4. hadoop关键进程
  5. value toDF is not a member of org.apache.spark.rdd.RDD[People]
  6. 软件设计原则(二)单一职责原则 -Single Responsibility Principle
  7. @Async注解配合@EnableAsync注解使用
  8. 使用IntelliJ IDEA搭建多maven模块JAVA项目
  9. node-red教程 5 函数节点
  10. SGID,SUID,SBIT