算法第三章上机实验

1实践题目名称:

最低通行费

2问题描述:

一个商人穿过一个N×N的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。

这个商人期望在规定时间内用最少费用穿越出去。请问至少需要多少费用?

注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)

输入格式:

第一行是一个整数,表示正方形的宽度N (1≤N<100);

后面N行,每行N个不大于100的整数,为网格上每个小方格的费用。

输出格式:

至少需要的费用。

3算法描述:

商人从网络的左上角进,右上角出,且给定步数为2n-1,说明只能向下或者向右走。用二维数组dp[i][j]表示从左上角起点开始到i行j列的最小花费,因为只能从上面或左边来,故每一格花费中的一部分是将到达其上面和到达其左边格子的花费(dp值)相比较,取二者较小值的格子作为到达本格的路线来源;另一部分是本格自身的花费,两部分费用相加即从起点到此的最小花费。

4问题求解

递归方程式:dp[i][j]=min(dp[i-1][j],dp[i][j-1]) + fee[i][j]

表的维度:n维

填表范围:i从1到n,j从1到n

填表顺序:从左到右,从上到下

时间复杂度:O (n2)

空间复杂度:O (n2)

5心得体会

通过这次实验进一步了解了动态规划法的原理和求解工作原理。关键在于分析递归关系,写出递归方程式,明确填表范围和填表顺序,注意好边界范围

6对动态规划算法的理解与体会

动态规划与其它算法相比,大大减少了计算量,丰富了计算结果,不仅求出了当前状态到目标状态的最优值,而且同时求出了到中间状态的最优值,这对于很多实际问题来说是很有用的。动态规划相比一般算法也存在一定缺点:空间占据过多,但对于空间需求量不大的题目来说,动态规划无疑是最佳方法。

(1)构造问题所对应的过程。
(2)思考过程的最后一个步骤,看看有哪些选择情况。
(3)找到最后一步的子问题,确保符合“子问题重叠”,把子问题中不相同的地方设置为参数(4)使得子问题符合“最优子结构”。
(5)找到边界,考虑边界的各种处理方式。 

(6)确保满足“子问题独立”,一般而言,如果我们是在多个子问题中选择一个作为实施方案,而不会同时实施多个方案,那么子问题就是独立的。
(7)考虑如何做备忘录。
(8)分析所需时间是否满足要求。 

(9)写出转移方程式。

posted @ 2021-10-26 23:57  ADzero  阅读(153)  评论(0编辑  收藏  举报