求一个按照逻辑排序的算法或数据结构

有N个序列,在每轮要么有一个数值,要么轮空。将序列进行排序,每轮选取没有轮空的排在最前的序列的数值。
问序列按什么顺序排序时,各轮的数值之和最大?

示例:

轮 1轮 2轮 3
序列 A523
序列 B1
序列 C-99
序列 D-2015

各排序结果的值:

排序轮1轮2轮3
ABCD52310
ABDC52310
ACBD52310
ACDB52310
ADBC52310
ADCB52310
BACD5139
BADC5139
BCAD51915
BCDA-2019-10
BDAC-20115-4
BDCA-20115-4
CABD5-995
CADB5-995
CBAD5-995
CBDA-20-99-20
CDAB-20-99-20
CDBA-20-99-20
DABC-20215-3
DACB-20215-3
DBAC-20115-4
DBCA-20115-4
DCAB-20-915-14
DCBA-20-915-14

最终BCAD排列的和最大,为所求结果。

(上述为举例,序列数和轮数不定。求一个能算出结果的算法或数据结构,不要穷举)

参考下下面链接
https://zh.cppreference.com/w/c/language/operator_logical

这个应该可以这么考虑
把每个序列分为轮空的项和非空的项, 总共n项, 序列总共m行,记录为Xm
假设Xm每个序列 轮空的项集合 Ak=a1 a2 a3 ... ak 非空的项集合是 Bp = b1 b2 ... bp,
k+p = n
那么对于每个Xm能够取到的最大值是:集合Bp之和 + 其它项对应Ai位置最大的值(max(Ak))之和
参考上面的例子:
序列B, 轮空集合 Ak = a1 a3, 非空集合是 Bp = b2
那么序列B这轮最大的值就是 b2 + max(a1第一轮其它序列的值) + max(a3第三轮其它序列的值) = 1 + 5 + 9 = 15
这个代码实现起来是比较简单的

esay