我一直在努力通過動態編程練習,我似乎無法掌握它。我會在這裏寫下這個問題,也是解決方案,明確說明我不瞭解的內容。動態編程練習
我們給出了2個序列u1,u2,...,un
和d1,d2,...,dm
以及由正整數C=[cij]
構成的尺寸爲n x m
的矩陣。如果 i1 < 12 <..< ik
和j1 < j2 <...< jk
被稱爲k對 ((ui1, dj1),(ui2,dj2),...,(uik,djk))
的列表是非相交的。 的「列表的兼容性」被說成是對和的兼容性,它是由,即Ci1j1 + Ci2j2 + ... + Cikjk
實施例: 考慮矩陣C = [Cij]
,所以Cij = squared(i + j)
。讓我成爲 i = 1, 2, 3, j = 1, 2, 3, 4
和k = 2
。一些2個不相交對的列表是這些((u1, d2),(u3, d3))
,其兼容性爲9 + 36 = 45
, ((u2, d2),(u3, d4))
,兼容性爲16 + 49 = 65,
和((u1, d1),(u2, d4)),
,兼容性爲4 + 36 = 40
。一些列出了沒有非交叉如下:((u2, d2),(u3, d1)),((u1, d4),(u3, d3)),((u3, d2),(u2, d3))
解決方案:
M(I,J,T)=從UI採取噸非交叉雙最大成本,...,UN和DJ,... DM
遞推方程:
M(i, j, t) = max {M(i + 1, j + 1, t − 1) + c(i, j), M(i, j + 1, t),M(i + 1, j, t).}
M(i, j, 0) = 0
M(i, j, t) = −∞, if t > min{n − i + 1, m − j + 1}
M(i, j, t) = 0, if i > n or j > m
我不把reccurrence下非常好,我們爲什麼要分配給−∞
時M(i, j, t)
但t > min{n − i + 1, m − j + 1}
0時i > n
或j > m
的解決方案是M(1,1,K) 。