AcWing 背包相关问题 1013. 机器分配

本文详细探讨了AcWing在线编程平台上的背包问题实例——1013. 机器分配,主要涉及动态规划算法的应用。通过分析题意,阐述了解题思路和步骤,包括状态转移方程的建立,以及如何利用动态规划求解此类问题,旨在帮助读者深入理解动态规划在实际问题中的应用。
摘要由CSDN通过智能技术生成
'''
看成分组背包问题求解,每个公司看成一个分组
分组里面可以选择M个物品,每个物品的开销都是自己的编号,价值就是题目给出的一行盈利
最后求解的是分组背包的最大价值总和以及形成最大价值总和的选择的方案
'''

# dp(i, j) 表示从i分组开始后面的所有分组做选择,总开销不超过j的所有选择中总价值的最大值
dp = [[0] * 20 for i in range(20)]
# dp(i, j) 表示从i分组开始后面的所有分组做选择,总开销不超过j的所有选择中总价值最大的选择方案在第i组中选择的物品编号
choice = [[-1] * 20 for i in range(20)]

N, M = map(int, input().split())

arr = []
for _ in range(N):
    arr.append(list(map(int, input().split())))

for i in range(N - 1, -1, -1):
    for j in range(M + 1):
        if i == N - 1:
            for k in range(M):
                if j >= k + 1:
                    if arr[i][k] > dp[i][j]:
                        dp[i][j] = arr[i][k]
                        choice[i][j] = k
        else:
            dp[i][j] = dp[i + 1][j]
            for k in range(M):
                if j >= k + 1:
                    if dp[i + 1][j -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值