在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向大序号地窖,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路径。某人可以从任意一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。
1、通过对题目的分析可以得到存在最优子结构和重复计算的问题,所以采用动态规划的方法去解决,
列出递归方程:a[i] = a[j] ( i与j相连 ) + b[i]
a[ ] 表示从 i 出发可挖到地雷的最大数, b[ ] 表示从 在 i处可挖到的地雷
2、 因为 i的解 使用 j(j>i) 的 解去求解的,所以这里建立一维表,从右往左填数据
3、算法里面需要用到 b[ ] 来存储 i处可挖地雷数,a[ ] 存储 从 i 出发可挖到地雷的最大数,path[ ]记录路径, 二维数组 m[i][j] 存储 i, j是否可连,所以空间复杂度为 O(n²)
算法里面需要求 a[i] 需遍历 m[i][j] (遍历上三角), 所以时间复杂度为 O(n²)
所以总的复杂度为 O(n²)
4、动态规划我认为比较难的是列出方程和列出方程后采用什么样的方式去解决,如果满足最优子结构和重复子问题的时候就可以用动态规划的方法去解决
5、结对编程对于动态规划还是有好处的,因为每个人都有各自的解决方法,可以拓展视野。