动态规划要学会问题转化
有一些题目,从表面上看无法进行动态规划,但是当对题目做一些转化或者尝试不同的解读,就会发现还是存在dp的条件的。下面这一题就比较经典,无论从题意的解读以及状态表达式针对的内容都需要进行一些转化的。
题目:
UVa1347
给定平面上n个点的坐标(按x递增的顺序给出),要设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外每个点恰好经过一次,且路径总长度最短。
题目解读:
将往返两个过程看成两个人从最左点走到最右点,且两个人走过的路不重合。(即i,j应该互斥)
状态表达式的确立:
dp[i][j]如果直接用来表示距离的话,那么状态转移的时候无法发现i,j是互斥的,dp[i][j]往(i+1,j)转移的时候可能会有两种状态,但是(i+1,j)只能被一个人走过。
所以不妨换个思路,dp[i][j]应该表示1-max(i,j)全部走过,而且两个人当前所在点分别是i和j,dp[i][j]下一步转移的话只能转移到dp[i+1][j]和dp[i+1][i]。也就是说下一个点i,只能被一个人走过。那么下一个点为啥是i呢?不可以是j么?在这个问题中dp[i][j] = dp[j][i],i也好,j也好都是对路径的遍历,也可以用j来表示,答案都是一样的。
评论:
本题是最X路径的变化题,本质上可以利用d[i] = max{d(j)+1};d[i]可以表示从i开始或者结束,解决最X问题i一般是这两种情况。