序列型动态规划

序列型动态规划

  • 给定一个序列
  • 动态规划方程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]中除了一个元素之外其他元素的最小值

猜你喜欢

转载自www.cnblogs.com/lulizhiTopCoder/p/10493962.html