【python】ALGO-1004 无聊的逗 - 背包问题解法

【python】ALGO-1004 无聊的逗 - 背包问题解法,第1张

话不多说,直接看代码吧。


# 状态搜索题
# 0-1背包问题
# n 样物品
# 背包容量为 sum//2
# 每样物品的重量和价值的数值一样
def canPart(nums):
    n = len(nums)
    if n < 2:
        return 0

    sumA = sum(nums)
    target = sumA //2

    # 建立背包
    dp = [[0] * (target+1) for i in range(n+1)]

    for i in range(nums[0], target+1):
        dp[0][i] = nums[0]
    for i in range(1, n+1):
        for j in range(1, target+1):
            if j < nums[i-1]:
                dp[i][j] = dp[i-1][j]
            else:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j- nums[i-1]] + nums[i-1])
    # print(dp[n][target])
    return dp[n][target]
        
    
def boringDou(n, nums):
    nums.sort()
    sumA = sum(nums)
    ans = 0
    if sumA%2 == 0:
        ans = canPart(nums)
    i=0
    while i < len(nums):
        sumA = sum(nums)
        if((sumA - nums[i]) % 2 == 0):
            nums.pop(i)
            ans = max(canPart(nums), ans)
            i = 0
            continue
        i += 1
    # print(" ans = %d" %ans)
    print(ans)
    return

n = int(input())
inp = input().split()
nums = []
for i in inp:
    nums.append(int(i))
boringDou(n, nums)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570351.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存