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

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

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

小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于K)?
输入格式
  第一行包含两个个整数N和K。
  第二行包含N个整数A1, A2, … AN。

对于30%的数据,1 <= N <= 10
  对于100%的数据,1 <= N <= 100000, 0 <= Ai <= 100000, 0 <= K <= 100000
输出格式
  一个整数,代表答案。
样例输入
10 0
1 4 2 8 5 7 1 4 2 8
样例输出
6

—————————————————————————————————

题目核心: DP
关键在于,将这样一个对局匹配的题分解为若干个数组(list),每个list中的元素间隔为k或k的倍数,即有可能会出现匹配成功的情况。
对于每一个数组中,即为清晰的0/1背包问题,
可得到递归递推式:
int result =
Max{
___ dp(arrayList, arr, n - 1, k)
___ dp(arrayList, arr, n - 2, k) + arr[arrayList.get(n)]
}
而在每一次的判断时,需要注意考虑每两个元素是否间隔为k,若间隔超过k(即k的倍数),说明当前元素n一定可以被取到(n-1的元素不会影响到元素n)。

注意判断k=0的特殊情况。

以下代码我用的memo来存储每一次的递归结果,避免重复运算,即自顶向下的动态规划。但是最终结果中,有一个测试集有运行错误,看了很久也没有看到错误原因,welcome 广大网友批评指正。

package dp;import java.util.ArrayList;
import java.util.Scanner;public class Duijupipei {public static int memo[];public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();int k = input.nextInt();int arr[] = new int[100001];int min = 100000;int max = 0;for (int i = 0; i < n; i++) {int number = input.nextInt();arr[number]++;if (number < min)min = number;if (number > max)max = number;}int result = 0;if (k == 0) {for (int i = 0; i < arr.length; i++) {if (arr[i] > 1)result += arr[i] - 1;}System.out.println(n - result);} else {for (int j = 0; j < k; j++) {ArrayList<Integer> arrayList = new ArrayList<>();for (int i = min + j; i <= max; i += k) {if (arr[i] != 0)arrayList.add(i);}int size = arrayList.size();memo = new int[size];result += dp(arrayList, arr, size - 1, k);}System.out.println(result);}}public static int dp(ArrayList<Integer> arrayList, int arr[], int n, int k) {if (n < 0)return 0;if (n == 0)return arr[arrayList.get(n)];if (memo[n] != 0) {return memo[n];}else {if(arrayList.get(n) - arrayList.get(n - 1) > k)return dp(arrayList, arr, n - 1, k) + arr[arrayList.get(n)];else {int result = Math.max(dp(arrayList, arr, n - 1, k), dp(arrayList, arr, n - 2, k) + arr[arrayList.get(n)]);memo[n] = result;return result;}}}}

蓝桥杯第四日——对局匹配相关推荐

  1. 蓝桥杯国赛 对局匹配(DP)

    蓝桥杯国赛 对局匹配(DP) 题目描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是 K ...

  2. 蓝桥杯 历届试题 对局匹配

    问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两人分差 ...

  3. 蓝桥杯2017第八届——对局匹配

    题目描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两人分差 ...

  4. 【蓝桥杯】历届试题 对局匹配(C++)

    [蓝桥杯]历届试题 对局匹配(C++) 问题描述 解题思路 具体代码 问题描述 题目链接:对局匹配. 资源限制: 时间限制:1.0s 内存限制:256.0MB 问题描述: 小明喜欢在一个围棋网站上找别 ...

  5. 2017蓝桥杯 对局匹配(贪心)

    历届试题 对局匹配 时间限制:1.0s 内存限制:256.0MB 问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在 ...

  6. [蓝桥杯][历届试题 PREV-50]对局匹配(Java)(动态规划)

    历届试题 对局匹配 时间限制:1.0s   内存限制:256.0MB 问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系 ...

  7. 【蓝桥杯】历届试题 对局匹配(贪心)

    历届试题 对局匹配 问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配 ...

  8. 蓝桥杯 java 历届试题 对局匹配

    历届试题 对局匹配 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动 ...

  9. 第八届蓝桥杯全国总决赛真题解析

    36进制 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 对于 16 进制,我们使用字母 A−F 来表示 10 及以上的数字. 如法炮制,一直用到字母 Z,就可以表示 36 ...

最新文章

  1. oracle无法创建监听器,关于Oracle net Manager中点击无法创建监听程序的解决方案
  2. java nosql_使用NoSQL实现实体服务–第4部分:Java EE
  3. 执行mongod其他实例出现的问题
  4. html 调用c#dll中的控件,C#调用ActiveX控件的方法
  5. 配置mac百度云同步盘
  6. 徐松亮硬件教学-微波天线设计-基于HFSS软件的天线设计流程
  7. 画 ArcFace 中的 margin 曲线
  8. 钉钉如何实现原笔迹手写签批
  9. basler相机的类
  10. TP笔记5、模型 文件上传 分页 会话技术与验证码
  11. 学术英语/专业英语——基本结构及特点
  12. Vue前端框架的使用
  13. Linux安装中文输入法(谷歌输入法和搜狗输入法)
  14. npm使用国内淘宝镜像的方法(两种)
  15. android微信分享图片踩坑之旅
  16. 【GSAP3教程】初次上手GSAP3
  17. 李骐老师2022年7月10日郑州讲授《项目管理与领导力培训》
  18. 基本中型网络的仿真(RYU+Mininet的SDN架构)-以校园为例
  19. vue重复点击路由 导致冗余导航的解决方法
  20. 奥术飞弹打死精灵龙的概率

热门文章

  1. vue的 slot插槽
  2. 深度学习中的模型修剪
  3. 截取url中的ip(ipv4和ipv6)
  4. java 继承关键字_java怎么继承,使用什么关键字?
  5. Retrofit2学习项目_2
  6. 怎么更改电脑默认下载位置?
  7. 经典算法-递归-角谷定理
  8. 学习笔记---Winform的东东忘了好些。。。
  9. 多样数字人民币钱包来袭,阻力与动力并存
  10. 全球量产汽车流行色彩报告:亚洲偏爱白色,欧洲喜好灰色