【问题标题】:Split the given array into K sub-arrays such that maximum sum of all sub arrays is minimum将给定数组拆分为 K 个子数组,使得所有子数组的最大和最小
【发布时间】:2022-01-25 02:37:57
【问题描述】:

对于给定的数组,我正在尝试计算 Min-Max 子数组。这是我的计算代码。我已经导出了子问题并尝试使用动态编程来完成它(仅使用递归,而不是记忆或制表)。请让我知道出了什么问题,因为它显示的列表不能被解释为整数。

更新:我已经更新了代码。请检查并让我知道出了什么问题。因为它说 min() arg 是一个空序列。

def Opt(i,j,S):
    if (j==1):
        return sum(S[:i])
    else:
        val = [max(Opt(l,j-1,S), sum(S[l:j])) for l in range(1,i,1)]
        return min(val)


# Driver Code
if __name__ == '__main__':
    S = [5, 7, 4, 2, 1, 6]
    k = 3
    n = len(S)
    ans = Opt(n,k,S)
    print(ans)

【问题讨论】:

    标签: python arrays python-3.x algorithm dynamic-programming


    【解决方案1】:

    range(1,i,1)sum(i[l:j])) 是问题所在。您的代码将 Opt() 的第一个参数视为列表和整数,在递归 Opt() 调用期间产生 TypeError

    【讨论】:

    • len(i) 也不起作用。
    • 问题或新错误是什么?
    • TypeError: 'int' 类型的对象没有 len()
    • 好的,我看到问题更清楚了。我认为问题在于 Opt() 的第一个参数在不同时间同时写为列表和整数(在输入时,代码将 i 视为列表 & 对于 sum(i[l:j]));在递归时,它使用 @ 987654327@ 作为range() 的整数)。不能两者兼有。
    • 是的,我找到了,谢谢。让我看看我能不能解决它。
    猜你喜欢
    • 2021-09-16
    • 2021-04-11
    • 1970-01-01
    • 2019-06-04
    • 2016-07-04
    • 2015-08-14
    • 1970-01-01
    • 2013-03-05
    • 2018-07-28
    相关资源
    最近更新 更多