算法 – 跳棋板 – DP

给出一个有4行和N列的跳棋板.矩阵中的每个单元都有一个值.

给定需要放置在板上的2N令牌(每个令牌都在一个单元上),因此矩阵单元中所有值的总和将尽可能大(最大值).

放置令牌的限制是两个令牌不能彼此水平或垂直相邻.

您不必放置所有2N令牌.

在列中放置令牌有八种合法方法,因此我定义了8个大小为N的数组,当每个数组描述一个选项时.

无论如何,使用动态编程,我需要为问题建立一个递归方程.

我提出了:

A(i,j) = max { A(i,j) , A(i,j) + max { A(i-1,j-1) , ... , H(i-1,j-1) } } , B(i,j) = .... , H(i,j) = ...

当A是第一个数组而H是第8个数组时.

现在,我不认为我的递归方程式是好的.即使它是,我也不知道如何添加条件(两个令牌不能水平或垂直相邻)到递归方程.

任何人都可以尝试帮忙吗?

最佳答案 这个答案实际上与unkulunkulu的答案相同,尽管是独立派生的.我在这里包含它因为它可能在数值上更好或更简单一些.

在下面,让{0..7}中的p或q为八个配置之一的索引,并且令k为列索引.设V(k,p)为列k中的配置p的值.设W(k,p)是以列k中的配置p结束的列0..k的最佳配置的值.如果配置p,q被允许相邻,则令φ(p,q)为1,否则为0.(φ等于unkulunkulu的图形关联矩阵.)符号∞表示大于矩阵的正单元值之和的数字.

那么W(k 1,p)=​​ V(k 1,p)maxq∈{0..7}(W(k,q)·φ(p,q)∞·(φ(p,q)-1) )
当k≥0时,W(0,p)= V(0,p).

点赞