刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

题目描述:

小蓝从公司出发,要去拜访N(3≤N≤15)个客户,已知公司到每个客户的路程时间,及N个客户之间的路程时间。请计算出小蓝拜访完所有客户并返回到公司,最少需要多少时间。(道路双向通行,可重复走)

例如:N = 3,有3个客户需要拜访,公司到1号、2号、3号客户的路程时间依次为9,7,5,客户1到客户2和客户3的路程时间依次是4,6,客户2到客户3的路程时间是3。

从公司出发拜访完3名客户并返回公司最少需要的路程时间为21,行走路线为:公司 --> 3号 --> 2号 --> 1号--> 公司(21=5+3+4+9)。

【输入描述】

1)第一行输入一个正整数N(3≤N≤15),表示要拜访的客户数量

2)第二行输入N个正整数(1≤正整数≤1000),依次表示公司到1号~N号客户的路程时间,正整数之间以一个空格隔开

3)第三行输入N-1个正整数(1≤正整数≤1000),依次表示1号客户到2号~N号客户的路程时间,正整数之间以一个空格隔开

4)第四行输入N-2个正整数(1≤正整数≤1000),依次表示2号客户到3号~N号客户的路程时间,正整数之间以一个空格隔开

......

第N+1行输入一个正整数(1≤正整数≤1000),表示N-1号客户到N号客户的路程时间

【输出描述】

输出一个整数,表示小蓝拜访完N名客户并返回公司最少需要的路程时间


【样例输入】

3
9 7 5
4 6
3

【样例输出】

21


使用微信搜索喵呜刷题,轻松应对考试!

答案:

对于这个问题,我们可以使用动态规划来解决。首先,我们需要定义一个二维数组dp,其中dp[i][j]表示从客户i到客户j的最短时间。然后,我们可以使用动态规划的思想,从前往后依次计算dp[i][j]的值。具体步骤如下:1. 初始化dp数组,将dp[i][i]的值设为从公司到客户i的时间。2. 对于每个客户i,从后往前遍历客户j,更新dp[i][j]的值为从公司到客户i的时间加上从客户j到客户i的时间与从公司到客户j的时间加上从客户j到客户i+1的时间加上从客户i+1到客户i的时间中的较小值。3. 最后,返回dp[1][N]的值,即从客户1到客户N的时间加上从客户N到客户1的时间,即为小蓝拜访完所有客户并返回到公司所需的最少时间。

解析:

【喵呜刷题小喵解析】:
这个问题可以使用动态规划来解决,因为我们需要找到从公司出发,经过所有客户并返回公司的最短时间,这是一个最优化问题。在动态规划中,我们需要定义一个状态,即dp[i][j]表示从客户i到客户j的最短时间。然后,我们可以使用动态规划的思想,从前往后依次计算dp[i][j]的值。

具体来说,我们可以从前往后遍历每个客户i,然后从后往前遍历每个客户j,更新dp[i][j]的值为从公司到客户i的时间加上从客户j到客户i的时间与从公司到客户j的时间加上从客户j到客户i+1的时间加上从客户i+1到客户i的时间中的较小值。这样,我们就可以计算出从每个客户到每个客户的最短时间。

最后,我们需要找到从客户1到客户N的时间加上从客户N到客户1的时间,即为小蓝拜访完所有客户并返回到公司所需的最少时间。这个值可以通过dp[1][N]来得到。

需要注意的是,这个问题中的状态转移方程比较复杂,需要仔细考虑。同时,由于客户数量比较多,我们需要注意优化算法的时间复杂度。在实际代码中,我们可以使用滚动数组的方式来优化空间复杂度。
创作类型:
原创

本文链接:题目描述: 小蓝从公司出发,要去拜访N(3≤N≤15)个客户,已知公司到每个客户的路程时间,及N个客

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share