题意:
给定n个节点组成的树,1为敌方基地,叶子结点为我方结点。我们可以在每个结点安放炮台,至多一炮,然后就可以打炮,每个结点有ki种炮,每种炮有一个花费 和一个能量(能量对应着打掉敌人多少hp)。敌人可能往一个结点的每条分支跑,所以要想保证守住阵地,就要保证每个分支都要安放炮台。最后问怎么打炮,才 能使打掉的敌人hp最多。
思路:
树形dp,dp[i][j]表示以i为根节点消耗j能量所打掉的最大hp
这道题有个坑,就是建炮的花费有可能是0,这样需要处理一下,避免建多个炮。
先附上自己的代码(889ms):
/* ***********************************************Author :devilCreated Time :2016/3/29 16:54:34************************************************ */#include#include #include #include #include #include #include #include
然后又参考了网上的另一种做法,把每个节点每种花费的最大hp消耗存在数组里,写起来方便些,遍历的要多,时间复杂度要高一些,附上代码(998ms):
/* ***********************************************Author :devilCreated Time :2016/3/29 16:58:28************************************************ */#include#include #include #include #include #include #include #include