蓝桥杯对局匹配——python

本文介绍了蓝桥杯围棋网站自动对局系统的匹配规则,即积分差为K的用户才能匹配。针对如何计算最多无法匹配的用户数,作者提供了思路分析和动态规划的解决方案。当K为0时,需排除同一时刻上线的用户;当K不为0时,通过动态规划找出最大共同在线人数。文章包含具体的动态规划状态转移方程。
摘要由CSDN通过智能技术生成

题目如下

小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。

小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是 K 的两名用户匹配在一起。如果两人分差小于或大于 K,系统都不会将他们匹配。

现在小明知道这个网站总共有 N 名用户,以及他们的积分分别是 A1, A2, AN

小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于 K)?
输入描述

第一行包含两个个整数 N,K。

第二行包含 NN个整数 A1, A2,AN

其中, ,0≤Ai≤10^5
0≤K≤10^5 。

输出描述
输出一个整数,代表答案。

输入输出样例
示例
输入

10 0
1 4 2 8 5 7 1 4 2 8
输出

6

题目解析

先分情况进行算,
首先k=0的时候,我们只需要找到所有的不在同一时间点上线的就可以了。
K!=0的时候,我们就需要进行分析:
假设 i 时间的一个用户上线,它所带来的影响时使得 i+k 和 i-k 的用户无法上线,但是不会影响i+2k和i-2k的用户,然后需要求最大的共同在线人数。我们可以立马想到动态规划方法。
动态规划的动态转移方程该怎么写呐?
当第i个人上线的时候,i-k是一定不会上线,同时不会影响i-2k,所以人数为i的人数加上(i-2k)的人数
当第i个人不上线的时候,i-k是会上线的,得出来的人数即为i-k的人数,
我们状态转移方程即为max(dp[i]+dp[i-2*y], dp[i-y])
但是当i<2k的时候,也只能影响到i-k,所以状态转移方程max(dp[i], dp[i-y])

代码如下

dp = [0 for _ in range(100000
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leosaf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值