洛谷5-深度优先搜索(3)
Table of Contents
1. P1605 迷宫
思路:
这道题是经典的迷宫的题目,只需要dfs暴搜即可。注意状态的修改与还原。
1 |
|
2. P1040 加分二叉树
思路:
这道题分为两个子问题:
(1)对于给定节点权值的中序遍历二叉树,怎样找到符合规定计算方法的得分最高的二叉树,输出这个分值
(2)输出这个二叉树的对应的前序遍历
解法:
采用带记忆的搜索dp,
变量dp[i][j]表示从i到j的最大值,很显然:
dp[i][j] = 1, if i == j
= max(dp[i][k]*dp[k+1][j] + dp[k][k]) for k in [i, j]
dp[i][i] = score[i],即每个叶子节点的分数是它本身的分数。
与此同时,保存一个变量root[i][j]表示从i到j这段子树的根节点。显然root[i][i]=[i]。
二叉树的前序输出:
二叉树的前序输出就是先输出根节点再输出左右节点。代码的递归写法很简单。
最终代码如下:
1 |
|
3. P1092 虫食算
思路:
这道题仍然是暴搜,但是会TLE,关键在于剪枝的技巧。
先上一种只能过80%数据的解法,正解需要用到高斯消元。回头再补。
1 |
|