题目链接
方法:DP
题目来源:紫书DP
题目分析
题目大意
平面上有n个点,按照x坐标从小到大的顺序给出,并且保证各点x坐标不相等,问一个人从左到右再从右到左,每个点只经过一次的话,所走过的最短距离是多少?
解析
当枚举一个人走的情况的话,无法保证回来的所选的点最优。所以能否两条路同时进行呢?两个人同时从左向右走,最后在最右端会和。这样可以用dp(i, j)表示当第一个人在i位置时,第二个人在j位置时的最短距离。那么还有一个问题,如果i=1, j=4,那下标为2和3的点是否访问就不得而知了,我们可以规定一下,对于dp[i][j]表示1~max(i, j)都访问过的结果,也就是说,对于dp[i][j]只可以转移到两个情况上,令i>j,则有$dp[i+1][j]=dp[i][j]+dis(i,i+1)$以及$dp[i+1][i]=dp[i][j]+dis(j,i+1)$这里第二个公式可能不太好理解,为什么是$dp[i][j]$转移到$dp[i+1][i]$而不是$dp[i][i+1]$,因为我们规定了$i>j$,也就是说,前一维的下标一定要大于后一维的下标。
代码
1 |
|