zoukankan      html  css  js  c++  java
  • 题目分享J

    题意:从一棵树的树根出发,除树根外每个节点都有其能经过的最多次数与经过后会获得的价值(可能为负,最多只能领一次价值),问最终走回树根能获得的最大价值以及有无可达到此价值的多种走法(ps:一开始在树根就可以选择不走,也就是说最终价值总和不可能为负)

    分析:首先给定最多经过次数为x,那么也就是说最多能从该节点x-1个儿子赶回该节点,自然想到贪心,这里我用的是优先队列,当然dp[i]表示从该节点往自己若干个儿子走完并回到i节点的价值总和的最大值,也就是任意一条以i为起点i为终点的路径上价值之和的最大值,那么不难想到dp[x]的值就是x的儿子中前x-1大的dp值之和再加上自己的价值,当然如果他的儿子中有价值是小于0,那就不需要将他加入优先队列中,然后就是处理是否有多种走法,第一种情况:考虑如果你要更新dp[x]的值,而他的一个儿子v被选中了,如果达到dp[v]的值有多种走法,那达到x的值一定也有多种走法,第二种情况:他的儿子中有多个(两个及以上)能达到同一个dp值,但由于经过次数的限定,他们中不能被全部选择,那么也会产生有多种走法,这里我采用的是记录最后一个需要被累加入dp[x]dp[v]值并将它与优先队列中的下一个值比较,如果存在下一个值且与其相等,则代表有多种走法,第三种情况,如果该节点有一个儿子的价值为0,而且有剩余的步数来走他,那么走和不走的价值没有变化,也会产生这两种走法,所以要用一个bool数组记录节点i是否有多种走法然后讨论上述三种情况

    代码:

  • 相关阅读:
    第5节 两牵引轴同步运动
    第4节 动一个牵引轴
    第3节 电控配置简介
    第2节 控制方案的制定
    第1节 中型PLC基本编程思路
    1200与VM(主动)之间的TCP/IP通讯
    西门子1200和温度计的模拟量应用
    西门子1200的高速计数功能和增量编码器功能
    西门子1200和V90之间(位置模式)的PID应用
    面试题68
  • 原文地址:https://www.cnblogs.com/lin4xu/p/12656397.html
Copyright © 2011-2022 走看看