我遇到以下動態規劃問題。動態規劃:找到具有最大總和的網格中的矩形
你有一個整數網格(所以包括負數)。找出具有最大數字總和的矩形。
任何想法如何爲整個矩陣做?
我解決了它的單個數組,所以我幾乎跟隨了最長的後續子查詢,但僅限於連續的數字。
def array_largest_block(sequence)
len = sequence.size
parents = [nil]*len
my_largest = sequence
largest = sequence.max
for index in (1...len)
if my_largest[index] < my_largest[index] + my_largest[index - 1]
my_largest[index] = my_largest[index] + my_largest[index - 1]
parents[index] = index - 1
largest = [largest, my_largest[index]].max
end
end
end_index_of_largest_block = my_largest.find_index(largest)
i = end_index_of_largest_block
res = []
res << sequence[i]
while !parents[i].nil?
i = parents[i]
res << sequence[i]
end
return {l_sum: largest, start: i, end: end_index_of_largest_block}
end
所以我的想法是,
- 發現每平方之和的基質(只是1x1的方格)
- 保存最大的一個可能的答案
- 運行同樣的事情出發從最小的可能的矩形中計算出所有的直到你找到最大值。 DB是哪一部分。
任何想法?或者如果你們不知道確切的解決方案,我應該看看哪種DP類型的算法?
謝謝!很乾淨的解決方案 – Matilda