对局匹配 动态规划问题算法题想求助各位大佬

如下这段代码是蓝桥杯对局匹配问题一个同学给出的答案 我研读了很久 也始终有一点想不明白

为了方便各位大佬解答 n指的是用户总人数 k指的是积分差恰好为k的两个玩家方可匹配 list1是这n个玩家的对应积分值

我的疑问就是针对下面那段代码中 dp背包的索引j的实际含义是什么 这个动态规划到底是如何实现的 谢谢各位耐心解答
import os
import sys
n, k = map(int, input().split())
list1 = list(map(int, input().split()))
maxn = max(list1)
if k == 0:
    print(len(set(list1)))
else:
    val = [0 for i in range(maxn + 1)]
    dp = [0 for i in range(maxn + 1)]
    for i in list1:
        val[i] += 1
    res = 0
    for j in range(maxn + 1):
        if 2 * k <= j:
            dp[j] = max(dp[j - k], dp[j - 2 * k] + val[j])
        elif j < k:
            dp[j] = val[j]
        else:
            dp[j] = max(dp[j - k], val[j])
s=0
for i in range(maxn-k+1,maxn+1):
  s+=dp[i]
print(s)
    for j in range(maxn + 1):
        if 2 * k <= j:
            dp[j] = max(dp[j - k], dp[j - 2 * k] + val[j])
        elif j < k:
            dp[j] = val[j]
        else:
            dp[j] = max(dp[j - k], val[j])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值