考虑到填充数值的类型是有0-9,所以可以枚举每一列的填充可能。令dp[i][p]表示在前i
列里填充,并且第i
列填充数字p
的最小操作。
转移方程非常直观,我们只需要在dp[i-1][q]且q!=p
的状态里选择一个最小的即可。然后加上将第i列全部填充为p的操作。
所以总的时间复杂度是n*10*10
。
事实上,对于每一列而言,我们不需要全部枚举0-9的填充可能。我们只需要考虑三种可能:填充为该列频次最多的元素、填充为该列频次第二多的元素、填充为该列频次第三多的元素。因为这三种方式中的某一种,就一定可以满足不与左右两列冲突的条件。而将该列填充为其他的元素,需要的操作肯定更高。