题目链接
方法: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 |
|