当前位置: 首页 > news >正文

沙河高端网站建设网站加网页

沙河高端网站建设,网站加网页,wordpress中view不见了,建设一个官方网站多少钱该题的方法,也有点背包的意思,如果一些不懂的朋友,可以从背包的角度去理解该树形DP 问题 题解主要在注释里 //该题是背包问题树形dp问题的结合版,在树上解决背包问题 //背包问题就是选或不选当前物品 //本题求的是最大分数 //先转…

该题的方法,也有点背包的意思,如果一些不懂的朋友,可以从背包的角度去理解该树形DP

问题

题解主要在注释里

         //该题是背包问题+树形dp问题的结合版,在树上解决背包问题

         //背包问题就是选或不选当前物品

         //本题求的是最大分数

         //先转成背包问题理解

         //从n个物品当中选出最大分数

         //再转成有限制版的

         //从n个物品当中选出最大分数,并且血量是健康的

         //再转成树形DP去理解该问题

         

         //树是健康就是,在任意一条树的路径下(到叶子节点的任意一条路径),能确保至少有一个物品不被选

         //从树上前n个物品当中选出一些物品,并且保证树是健康的

         //从树上前i个物品当中选出保证树是健康的前提下,能选出的不超过i个物品的最大分数

         //然后再去拓展这个定义

         

         //结合树形DP的经验

         //以当前u为根节点的子树,在保证树是健康的前提下,能选出的最大分数

         //那么就有了推导过程,从下往上推导,也就是从最小子树往上推导到最大子树最大分数

         //那么最好的做法就是利用递归的特性,回溯的时候进行推导

         //这题中我们直接找出最大分数,其实是比较难的,我们用初中的思想

         //正难则反,既然找最大分数(有个不选的)比较难,那么我们可以用

         //找个最小分数(选上的),那么就变得比较简单了

         

         //状态定义

         //首先我们找最小的,以树形dp为经验推导出

         //我们以u为根节点的子树,总和最小的分数(并且是保证健康的,在一条路径上最少也得选一个)

         //定义为min_val[u]

               

         //那么怎么算出最大分数呢,既然有min_val[u],那么就有,以当前u为根节点的子树节点总和sum_val[u]

         //那么相减sum_val[u] - min_val[u]就等于最大分数了

         

         //那么如何推导这两个定义的数组呢?

         //树形dp类型问题,最好首先用dfs,边回溯边推导数组

 

class Solution {
public:void dfs_sum_val(int u,int fa,vector<int>& val,vector<vector<int>>& g,vector<long long>& sum_val){sum_val[u] = val[u];for(auto e:g[u])if(fa != e)//不要往上计算,我们是从下往上推导{dfs_sum_val(e,u,val,g,sum_val);//回溯计算sum_val[u] += sum_val[e];}//这个dfs我们可以算作一个小题,就是计算出每个点为根节点的子树的总和}void dfs_min_val(int u,int fa,vector<int>& val,vector<vector<int>>& g,vector<long long>& min_val){long long min_res = 0;min_val[u] = (long long)val[u];for(auto& e:g[u]){if(fa != e){dfs_min_val(e,u,val,g,min_val);min_res += min_val[e];}}if(min_res) min_val[u] = min((long long)min_val[u],min_res);}long long maximumScoreAfterOperations(vector<vector<int>>& edges, vector<int>& values) {//该题是背包问题+树形dp问题的结合版,在树上解决背包问题//背包问题就是选或不选当前物品//本题求的是最大分数//先转成背包问题理解//从n个物品当中选出最大分数//再转成有限制版的//从n个物品当中选出最大分数,并且血量是健康的//再转成树形DP去理解该问题//树是健康就是,在任意一条树的路径下(到叶子节点的任意一条路径),能确保至少有一个物品不被选//从树上前n个物品当中选出一些物品,并且保证树是健康的//从树上前i个物品当中选出保证树是健康的前提下,能选出的不超过i个物品的最大分数//然后再去拓展这个定义//结合树形DP的经验//以当前u为根节点的子树,在保证树是健康的前提下,能选出的最大分数//那么就有了推导过程,从下往上推导,也就是从最小子树往上推导到最大子树最大分数//那么最好的做法就是利用递归的特性,回溯的时候进行推导//这题中我们直接找出最大分数,其实是比较难的,我们用初中的思想//正难则反,既然找最大分数(有个不选的)比较难,那么我们可以用//找个最小分数(选上的),那么就变得比较简单了//状态定义//首先我们找最小的,以树形dp为经验推导出//我们以u为根节点的子树,总和最小的分数(并且是保证健康的,在一条路径上最少也得选一个)//定义为min_val[u]//那么怎么算出最大分数呢,既然有min_val[u],那么就有,以当前u为根节点的子树节点总和sum_val[u]//那么相减sum_val[u] - min_val[u]就等于最大分数了//那么如何推导这两个定义的数组呢?//树形dp类型问题,最好首先用dfs,边回溯边推导数组int edge_size = edges.size();vector<vector<int>> g(values.size() + 110);for(int i = 0;i < edge_size;i++){int a = edges[i][0];int b = edges[i][1];g[a].push_back(b);g[b].push_back(a);}vector<long long> sum_val(21000);vector<long long> min_val(21000,0x3f3f3f3f);//预处理出来sum_val数组dfs_sum_val(0,-1,values,g,sum_val);//预处理出来min_val数组dfs_min_val(0,-1,values,g,min_val);return sum_val[0] - min_val[0];}
};

http://www.yayakq.cn/news/927452/

相关文章:

  • 菏泽网站建设信息网络游戏排行榜2020
  • 做网站留言板需要什么条件北京模板网站开发全包
  • 邯郸网站建设怎么做如何实现一个响应式网页
  • 广州短视频网站开发微信群发布网站建设
  • 论坛类型的网站怎么做旅游网站设计方案怎么做
  • 网站HTML怎么做链接江干区网站建设
  • 我有网站 怎么做淘宝推广wordpress phpstudy
  • 大连爱得科技网站建设公司怎么样高端网站 设计
  • 淘宝网站c 设计怎么做的宠物商品销售网站开发背景
  • discuz 企业网站 模板团工作网站建设意见
  • 简单门户网站开发网站 带数据
  • 网站建设发展指引网站建设公司图片
  • 莆田网站建设优化深圳网站建设定制开发 超凡科技
  • 网站商城网络整合营销平台推广策划
  • 自己网站可以加标志吗有口碑的大良网站建设
  • 做旅游网站平台合作入驻怎么建立图片文件
  • 做网站注意哪些方面代码编程软件免费
  • 河南省 门户网站建设要求网站建设管理与维护ppt
  • 梅河口网站开发客户关系管理软件
  • 网站技术方案做网销做什么网站
  • 月编程做网站专门找人做软件的网站
  • 做物流网站的多少钱风景区网站建设项目建设可行性
  • 济南优化网站价格扁平化网站建设
  • 山东做网站的网站模板 jsp
  • 合肥市城乡建设局2019网站wordpress 编辑器表情插件
  • 路飞和女帝做h的网站龙口网站建设价格
  • 个体工商户软件开发网站建设维护校园微网站建设方案
  • 自贡 网站建设wordpress 评论 改微博
  • 合肥建设工程交易网站三元里网站建设
  • 全包家装原创装修网站小程序推广