【发布时间】:2021-06-22 20:16:46
【问题描述】:
请,我想找出每行只有一个值的最大总和。我已经通过蛮力做出了决议,它是O(N ^ 5)。现在我想找到一种动态编程的方法或另一种降低复杂性的方法。
例如:
矩阵:
100 5 4 3 1
90 80 70 60 50
70 69 65 20 10
60 20 10 5 1
50 45 15 6 1
5套解决方案:
-
100 + 90 + 70 + 60 + 50 = 370
-
100 + 90 + 69 + 60 + 50 = 369
-
100 + 90 + 70 + 60 + 45 = 365
-
100 + 90 + 65 + 60 + 50 = 365
-
100 + 90 + 69 + 60 + 45 = 364
总和:1833
蛮力求和的例子:
for(int i=0; i<matrix[0].size(); i++) {
for(int j=0; j<matrix[1].size(); j++) {
for(int k=0; k<matrix[2].size(); k++) {
for(int l=0; l<matrix[3].size(); l++) {
for(int x=0; x<matrix[4].size(); x++) {
sum.push_back(matrix[0][i] + matrix[1][j] + matrix[2][k] + matrix[3][l] + matrix[4][x]);
}
}
}
}
}
sort(sum.begin(), sum.end(), mySort);
谢谢!
【问题讨论】:
-
在您的示例中,您有 `2: 100 + 90 + 69 + 60 + 50 = 369` 作为较大的总和之一,但
90和69出现在同一行? -
对不起,我做了很多测试用例,结果弄得一团糟。现在它是正确的。谢谢!
-
矩阵中的行是否总是排序的(开头最高,结尾最低)?
-
是的,每行开头的最大值,末尾的最小值。
-
有什么限制?
O(n^3)会工作吗?
标签: algorithm time-complexity dynamic-programming