序列型动态规划
- 给定一个序列
- 动态规划方程f[i]中的下标i表示前i个元素a[0],a[1],...,a[i-1]的某种性质
-坐标型的f[i]表示以ai为结尾IDE某种性质
- 初始化中,f[0]表示空序列的性质
-坐标型动态规划的初始条件f[0]就是指以a0为结尾的子序列的性质
例题
Paint House II
题目分析
- 这题和Paint House非常类似,只是颜色种类变成K种
- 动态规划思路和Paint House一样,需要记录尤其前i栋房子并且房子i-1是颜色1,颜色2,...,颜色k的最小花费:
f[i][1], f[i][2], ... , f[i][K]
动态规划组成部分二:转移方程
- 设油漆前i栋房子并且房子i-1是颜色1,颜色2,... ,颜色K的最小花费分别为法f[i][1], f[i][2], .... ,f[i][K]
f[i][1] = min{f[i - 1][2] + cost[i - 1][1], f[i - 1][3] + cost[i - 1][1], ... ,f[i - 1][K] + cost[i - 1][1]}
f[i][2] = min{f[i - 1][1] + cost[i - 1][2], f[i - 1][3] + cost[i - 1][2], ... ,f[i - 1][K] + cost[i - 1][2]}
...
f[i][K] = min{f[i - 1][1] + cost[i - 1][K], f[i - 1][2] + cost[i - 1][K], ... ,f[i - 1][K-1] + cost[i-1][K]}
- 设油漆前i栋房子并且房子i - 1是颜色1,颜色2,.... ,颜色K的最小花费分别为f[i][1], f[i][2], ... , f[i][K]
- 直接计算的时间复杂度(计算步数):
-i从0到N
-j从1到K
-k从1到K
-O(NK2)
动态规划常见优化
- f[i][j] =mink≠j{f[i - 1][k]} + cost[i - 1][j]
- 每次需要求f[i - 1][1],...,f[i - 1][K]中除了一个元素之外其他元素的最小值