2 solutions
-
0
题目大意
在一个冒险类游戏中,参与者可以在一个由多个方格构成的地图上寻找食物。每个方格有一个编号、一个父方格编号和对应的食物单位数。参与者可以通过传送门从一个方格移动到另一个方格。 参与者可以选择任意方格作为起点,并可以在任何方格选择退出游戏。任务是计算参与者在退出时能够获得的最多食物单位数
思路
简单树上dp
1.数据结构设计:
使用邻接表来表示地图的结构,其中每个方格和其通过传送门可达的方格形成一个有向图。
2.输入处理:
读取方格的数量和每个方格的 id、parent-id、value,并构建邻接表。 确定根节点(parent-id 为 -1 的方格)。
3.深度优先搜索(DFS):
使用 DFS 遍历整个树,从根节点开始,计算从每个方格出发可以获取的最多食物单位数。 对于每个方格,初始值为其自身的食物单位数。在访问子节点时,更新当前节点的食物总数为当前节点的食物数加上子节点的食物数。 在更新食物总数时,考虑子树的选择,可能会选择不访问某个子节点以达到更高的总和。
4.结果输出:
记录在 DFS 遍历过程中能获得的最大食物单位数,并在最后输出结果。
时间复杂度:
代码说明
整体代码流程
1.输入读取:
读取方格数量 N 和每个方格的 id、parent-id、value,构建树的邻接表。
2.邻接表构建:
使用数组或链表来存储每个方格可以通过传送门到达的其他方格。
3.DFS 初始化:
定义一个数组来存储每个方格可以获得的食物总和。 从根节点开始进行 DFS 遍历,计算每个节点的食物总和。
4.DFS 遍历:
递归访问每个方格,更新食物总数。 处理子节点并更新当前节点的食物总数。
5.输出结果:
输出参与者能够获得的最多食物单位数。
代码
CPP
python
Java
Go
Js
- 1
Information
- ID
- 5
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 131
- Accepted
- 33
- Uploaded By