明天晚上就要笔试了,又有新的原题来参考练手了,这道题如果不知道viterbi算法可能通过dp有点难做出来。
所以说学习是永无止境的hhh!
图源自牛客论坛上(话说他们是怎么截图的,难道这样不算作弊吗,不太懂笔试的规则)
输入描述
4
5 9 5 4 4
4 7 4 10 3
2 10 9 2 3
输出描述
5
确定状态
Viterbi算法是说每到一个状态就记录下到当前状态的最值,然后以此为基准向后推进(因此就是动态规划的思想)
dp[i][j]表示走到第i行第j列的最小值
状态转移方程
dp[i][j] = min{ dp[k][j-1] +abs{matrix[i][j]-matrix[k][j-1]},dp[i][j]} {k=0,1,2}
初始状态和边界条件
dp[k][0] = 0 (第一列的差值为0)
计算顺序
dp[0][1] dp[1][1] dp[2][1]
....
dp[0][n-1] dp[1][n-1] dp[2][n-1]
最终返回值:min{dp[0][n-1] dp[1][n-1] dp[2][n-1]}
代码
public static void s