题目链接:

http://lx.lanqiao.cn/problem.page?gpid=T14

问题描述
有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?
输入格式
第一行包含一个整数 n 。
接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。
接下来一共 n-1 行,每行描述树上的一条边。
输出格式
输出一个整数,代表选出的点的权值和的最大值。
样例输入
5
1 2 3 4 5
1 2
1 3
2 4
2 5
样例输出
12
样例说明
选择3、4、5号点,权值和为 3+4+5 = 12 。
数据规模与约定
对于20%的数据, n <= 20。
对于50%的数据, n <= 1000。
对于100%的数据, n <= 100000。
权值均为不超过1000的正整数。

解题思路:这是一道树形动态规划问题,用F[i]表示从子树i中选择结点,且结点i必须被选择的最大值,用G[i]表示从子树i中选择结点,且结点i必须不被选择的最大值。
则F[i]=a[i]+\sum(G[j]),其中a[i]表示结点i的权值,j是i的子结点。
G[i]=\sum(max(F[j], G[j])),其中j是i的子结点。

这里采用/扩散深搜的方法,遍历所有的节点,记录每个节点选择情况进行DP,

建立l索引,即每一个节点l[i]所关联的[j]个节点

我们注意的是每次搜索时的剪枝,子节点不能回到父亲节点

我采取的做法是直接将父节点传进去,选取当前l[x][k]节点时注意l[x][k]值与f不同

#include<string.h>
#include<stdio.h>
int dp[100010][2];     //每个节点取或不取的最大值
int l[100010][100];     //所属子节点
int fmax(int a,int b)
{return a>b?a:b;
}
void list(int a,int b)   //构造树
{  int i=0;int j=0;while(l[a][i])      //确保当前为空 i++;l[a][i]=b;          //连接 while(l[b][j])j++;l[b][j]=a;
}
void dfs(int x,int f)   //深搜
{int i,k;k=0; while(i=l[x][k++]) //提取l[x][k] {      if(i!=f)  //f为x点的父节点 i为x点的子节点,保证子父不同 {  dfs(i,x); //递归下一层 dp[x][1]+=dp[i][0];                  dp[x][0]+=fmax(dp[i][0],dp[i][1]); //状态转移方程 }// printf("%d,%d\n",dp[x][1],dp[x][0]); }
}
int main()
{int m,i,n,x;int a,b,c;while(~scanf("%d",&n)) {memset(l,0,sizeof(l));memset(dp,0,sizeof(dp));for(i=1;i<=n;i++) scanf("%d",&dp[i][1]);//选取i点初始拥有的权值 for(i=1;i<n;i++) {scanf("%d%d",&a,&b);list(a,b);              //关联树 }/*for(i=1;i<=n;i++){for(x=0;l[i][x]!=0;x++)printf("%d-%d\n",i,l[i][x]);}*/dfs(1,0);x=fmax(dp[1][0],dp[1][1]);    //第一个点选或不选的max值 printf("%d\n",x);}return 0;
}

动态规划——节点选择(蓝桥杯试题集)相关推荐

  1. 动态规划——K号数(蓝桥杯试题集)

    题目链接:http://lx.lanqiao.cn/problem.page?gpid=T13 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求 ...

  2. 动态规划——看似dp的贪心问题最大乘积(蓝桥杯试题集)

    题目链接: http://lx.lanqiao.cn/problem.page?gpid=T136 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数 ...

  3. 线段树——操作格子(蓝桥杯试题集)

    题目链接: http://lx.lanqiao.cn/problem.page?gpid=T18 题目描述: 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个 ...

  4. 最小生成树——安慰奶牛(蓝桥杯试题集)

    *对prim算法.Kruskal算法不是很理解的请移步 http://blog.csdn.net/sm9sun/article/details/53256232  //并查集 http://blog. ...

  5. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

    题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...

  6. 最短路径——SPFA算法(蓝桥杯试题集)

    *对于本题的floyd题解请跳转:http://blog.csdn.net/sm9sun/article/details/53285870 题目链接: http://lx.lanqiao.cn/pro ...

  7. 最短路径——Floyd算法及优化(蓝桥杯试题集)

    *对最短路径问题以及floyd算法.Dijkstra算法不是很理解的同学请移步前几篇博客~ 题目链接: http://lx.lanqiao.cn/problem.page?gpid=T15 问题描述 ...

  8. 蓝桥杯研究生c语言试题答案,蓝桥杯试题_蓝桥杯 你有蓝桥杯历年的试题吗最好有参考答案啊 高职高专组C语言的 有的话麻烦你发给我 万分感谢_淘题吧...

    ❶ 蓝桥杯 你有蓝桥杯历年的试题吗最好有参考答案啊. 高职高专组C语言的 有的话麻烦你发给我 万分感谢 我有真题.但是老师没给答案 ❷ 为什么蓝桥杯试题集评测老是错 楼上的网友说的很简单,实际上因为每 ...

  9. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

最新文章

  1. 栈与队列1——设计getMin功能的栈
  2. python中登录、注册操作数据库
  3. go微服务框架go-micro深度学习(五) stream 调用过程详解
  4. Postman中几个body请求格式区别及使用说明
  5. 在ubuntu下安装memcache
  6. 神威计算机主板型号,十代酷睿高端型Z490主板曝光 总线规格依旧是PCIe 3.0且USB接口并不支持USB 3.2...
  7. 一图看懂编程语言迁移模式:终点站是Python、Go、JS
  8. ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
  9. 【bzoj5166】[HAOI2014]遥感监测 贪心
  10. aac蓝牙编解码协议_蓝牙协议总结
  11. 路由器、DDNS、花生壳
  12. 乐山市计算机学校灵异事件,真人真事:我们学校那些灵异的事情(西南交通大学灵异事件)...
  13. X86 CPU 漏洞 Meltdown 原理及google攻击代码
  14. 实时网速怎么看快慢_电脑怎么看网速快慢,手机网速怎么看快慢k/s-
  15. vue对象属性为null_vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题...
  16. Windows系统上的软件(如:爱奇艺万能播放器)固定任务栏图标后,打开后出现新任务栏图标
  17. 「囚徒困境」有哪些现实的例子?
  18. 红黑树与平衡二叉树_百图详解红黑树
  19. 如何解决scala读取本地文件失败
  20. 【网络安全】上网行为管理

热门文章

  1. 10 MM配置-主数据-定义物料类型
  2. 48 FI配置-财务会计-固定资产-与总账集成-定义折旧范围到总账的过账方式
  3. python上传文件 request_Python request 上传文件
  4. torchvision.datasets.ImageFolder使用详解
  5. 09 | 自编码器:让模型拥有属于自己的表达和语言
  6. [Unity] Canvas 设置为 Screen Space - Camera 时,UI 被场景物体遮挡的解决办法:设置 Canvas 的 Plane Distance 为一个较小的数
  7. delphi测试服务器响应时间,负载测试中的页面响应时间 - Visual Studio (Windows) | Microsoft Docs...
  8. 计算机课设容易挂吗,数学差的学生避开这4大专业,挂科是常态,每年都有学生不能毕业...
  9. eyoucms 入门必备
  10. 百度统计:网站统计实时访客报告