算法第三章作业

1.挖地雷

在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向大序号地窖,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路径。某人可以从任意一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。

输入格式:

第一行:地窖的个数;

第二行:为依次每个地窖地雷的个数;

下面若干行:

xi yi //表示从xi可到yi,xi<yi。

最后一行为"0 0"表示结束。

输出格式:

k1-k2−…−kv //挖地雷的顺序 挖到最多的雷。

1.1 根据最优子结构性质,列出递归方程式,

用a[i]表示输入的数组,b[i]表示从i位置依照路径挖到最后一个位置的雷是多少

b[i]=max(b[j]+a[i]); j>=i+1且j<=n;

1.2 给出填表法中表的维度、填表范围和填表顺序。

表的维度是1*n的

填表范围是1-n(数组从1开始输入的)

填表顺序是从右往左;

1.3 分析该算法的时间和空间复杂度

算法的时间复杂度是o(n^2),因为运用到for的2层循环  空间复杂度为o(n),填表的大小即1-n

2. 你对动态规划算法的理解

动态规划法是先要确定问题是否具有最优子结构的性质,然后再观察其是否具有重复计算子问题的性质,如果都具备,则可以通过动态规划法,将其计算结果通过表格记录下来,首先要建立递归方程式,然后确定表的维度和填表顺序,之后问题即可得到求解,动态规划与分治法有类似的地方,但它内部是存在关联的,一个问题的解取决于它上一个问题的解,这样可以大大缩短求解时间

3. 说明结对编程情况

 结对编程我们先是课下先自己思考怎么求解,如果提交之后还有测试点没有通过,那我们会结对一起看可能问题出现在哪里,最后找出一些细节上的bug,然后加以改正

 

posted @ 2020-11-01 08:54  鲤红  阅读(164)  评论(0编辑  收藏  举报