【秋招笔试题】阵营分配


解法:简单背包题。

python 复制代码
def solve(nums):
    n = len(nums)
    totalSum = sum(nums)

    dp = [[False] * (totalSum // 2 + 1) for _ in range(n + 1)]

    for i in range(n + 1):
        dp[i][0] = True

    for i in range(1, n + 1):
        for j in range(1, totalSum // 2 + 1):
            if nums[i - 1] <= j:
                dp[i][j] = dp[i - 1][j] or dp[i - 1][j - nums[i - 1]]
            else:
                dp[i][j] = dp[i - 1][j]

    minDiff = totalSum
    for j in range(totalSum // 2, -1, -1):
        if dp[n][j]:
            minDiff = totalSum - 2 * j
            break

    return minDiff

if __name__ == "__main__":
    n = int(input())
    nums = list(map(int, input().split()))

    result = solve(nums)
    print(result)
相关推荐
Kent_J_Truman1 小时前
【玉米田】
算法
立志成为coding大牛的菜鸟.1 小时前
力扣53-最大子序和(Java详细题解)
算法·leetcode·职场和发展
panamera121 小时前
linux下日志系统setvbuf接口及结构体 handle_file_t成员介绍
linux·服务器·开发语言·网络·c++·算法
BUG指挥官1 小时前
7种限流算法打开新方式
java·redis·算法·spring cloud
清风拂山岗11112 小时前
【算法与数据结构复习】| 快速排序
数据结构·算法
GEEK零零七3 小时前
Leetcode 43. 字符串相乘
算法·leetcode
小电玩3 小时前
Rust语言入门第七篇-控制流
开发语言·算法·rust
杰克尼4 小时前
1614. 括号的最大嵌套深度
算法·leetcode·职场和发展