华为OD机考2025B卷 - 最佳对手 / 实力差距最小总和(Java & Python& JS & C++ & C )

题目描述

游戏里面,队伍通过匹配实力相近的对手进行对战。但是如果匹配的队伍实力相差太大,对于双方游戏体验都不会太好。

给定n个队伍的实力值,对其进行两两实力匹配,两支队伍实例差距在允许的最大差距d内,则可以匹配。
要求在匹配队伍最多的情况下匹配出的各组实力差距的总和最小。

输入描述

第一行,n,d。队伍个数n。允许的最大实力差距d。

  • 2<=n <=50
  • 0<=d<=100

第二行,n个队伍的实力值空格分割。

  • 0<=各队伍实力值<=100

输出描述

匹配后,各组对战的实力差值的总和。若没有队伍可以匹配,则输出-1。

示例1

输入

6 30
81 87 47 59 81 18

输出

57

说明

18与47配对,实力差距29
59与81配对,实力差距22
81与87配对,实力差距6
总实力差距29+22+6=57

示例2

输入

6 20
81 87 47 59 81 18

输出

12

说明

最多能匹配成功4支队伍。
47与59配对,实力差距12,
81与81配对,实力差距0。
总实力差距12+0=12

示例3

输入

4 10
40 51 62 73

输出

-1

说明

实力差距都在10以上,
没有队伍可以匹配成功。

解题思路

给定 n 个队伍的实力值和一个允许的最大实力差距 d,要求将队伍进行两两配对,满足每对队伍的实力差距不超过 d,并且在尽可能多的匹配情况下,使所有匹配的实力差距的总和最小。如果没有符合条件的匹配,则输出 -1

动态规划思路

  1. 状态定义
    • pairs[i]:前 i 个队伍中最多能匹配的队伍对数。
    • min_sum[i]&#

你可能感兴趣的:(最新华为OD机试真题,华为OD机试真题,(Java/JS/Py/C),java,华为od,python,javascript,华为OD机考2025B卷,c++)