子序列是可以通过删除某些元素而不更改其余元素的顺序而从另一个序列派生的序列。严格增加的子序列是每个元素都大于前一个元素的子序列。
序列中增加最重的子序列是元素数量总和最大的严格增加的子序列。
用您选择的语言实现一个程序或函数,该程序或函数查找给定的非负整数列表中最重的递增子序列的元素和。
例子:
[] -> 0 ([])
[3] -> 3 ([3])
[3, 2, 1] -> 3 ([3])
[3, 2, 5, 6] -> 14 ([3, 5, 6])
[9, 3, 2, 1, 4] -> 9 ([9])
[3, 4, 1, 4, 1] -> 7 ([3, 4])
[9, 1, 2, 3, 4] -> 10 ([1, 2, 3, 4])
[1, 2, 4, 3, 4] -> 10 ([1, 2, 3, 4])
[9, 1, 2, 3, 4, 5, 10] -> 25 ([1, 2, 3, 4, 5, 10])
[3, 2, 1, 2, 3] -> 6 ([1, 2, 3])
注意,您只需要给出最重的递增子序列的元素和,而不必给出子序列本身。
渐近最快的代码获胜,其中较小的代码大小(以字节为单位)作为平局。