当前位置: 首页 > news >正文

做网站设计制作公司/百度百科入口

做网站设计制作公司,百度百科入口,网站模板可以自己做,遵义在线读者留言板留言华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。 看…

华为OD机试题库《C++》限时优惠 9.9

华为OD机试题库《Python》限时优惠 9.9

华为OD机试题库《JavaScript》限时优惠 9.9

针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。

看不懂有疑问需要答疑辅导欢迎私VX: code5bug

华为OD机试真题

题目描述

在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到MVP。

MVP的条件是单场最高分得分获得者,可以并列,所以宇宙战队决定在比赛中尽可能让更多队员上场且让所有得分的选手得分都相同。

然而比赛过程中的每1分钟的得分都只能由某一个人包揽。

输入描述

输入第一行为一个数字t,表示为有得分的分钟数(1<=t<=50)

第二行为t个数字,代表每一分钟的得分p,(1<=p<=50)

输出描述

输出有得分的队员都是MVP时,最少得MVP得分

示例1

输入:
9
5 2 1 5 2 1 5 2 1输出:
6说明:
样例解释:一共4人得分,分别都为6分
5 + 1
5 + 1
5 + 1
2 + 2 + 2

题解

这道题目属于**回溯算法(Backtracking)贪心算法(Greedy Algorithm)的结合。我们需要将给定的得分分钟数分配到一个或多个队员中,使得每个队员的总得分相同,并且这个相同的得分尽可能小。这类似于分割等和子集(Partition to K Equal Sum Subsets)**的问题。

解题思路

  1. 问题分析:我们需要将所有的分钟得分分配给若干个队员,每个队员的总得分相同,且这个得分是所有可能中最小的。这意味着我们需要找到一个得分 score,使得所有分钟得分可以被分成若干组,每组的和恰好是 score,并且 score 是满足条件的最小值。
  2. 关键步骤
    • 计算总和:首先计算所有分钟得分的总和 total。因为每个队员的得分必须相同,所以 score 必须是 total 的一个约数。
    • 排序:将分钟得分降序排序,以便在回溯时优先处理较大的数值,从而更快地剪枝。
    • 回溯检查:对于每一个可能的 score(从最大值 maxtotal),检查是否可以将分钟得分分成 total / score 组,每组的和恰好是 score
  3. 回溯函数canPartitionKSubsets 函数尝试将分钟得分分配到 k 个组中,每个组的和不超过 LIMIT(即 score)。通过回溯的方式尝试所有可能的分配方案。

Java

import java.util.*;
import java.util.stream.IntStream;
/*** @author code5bug*/
public class Main {// 能否将数组等分成k组,每组和为LIMITpublic static boolean canPartitionKSubsets(int[] arr, int k, int LIMIT) {int[] groups = new int[k];return backtrack(arr, 0, groups, LIMIT);}// 回溯函数:尝试将分钟得分分配到k个组中,每组和不超过LIMITprivate static boolean backtrack(int[] nums, int idx, int[] groups, int LIMIT) {if (idx == nums.length) return true; // 所有分钟得分已分配完毕for (int i = 0; i < groups.length; i++) {if (groups[i] + nums[idx] > LIMIT) continue; // 当前组和超过LIMIT,跳过if (i > 0 && groups[i] == groups[i - 1]) continue; // 避免重复分配groups[i] += nums[idx]; // 尝试将当前分钟得分分配到第i组if (backtrack(nums, idx + 1, groups, LIMIT)) return true; // 递归检查剩余分钟得分groups[i] -= nums[idx]; // 回溯}return false;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 有得分的分钟数int t = sc.nextInt();int[] arr = new int[t];for (int i = 0; i < t; i++) {arr[i] = sc.nextInt(); // 每分钟的得分}// 降序排序,优化回溯剪枝Arrays.sort(arr);reverse(arr);int total = IntStream.of(arr).sum(); // 计算总得分int max = arr[0]; // 最大分钟得分// 遍历可能的score,从max到totalfor (int score = max; score <= total; score++) {if (total % score != 0) continue; // score必须是total的约数if (canPartitionKSubsets(arr, total / score, score)) {System.out.println(score); // 找到最小score,输出并退出break;}}}// 辅助函数:数组降序排序private static void reverse(int[] arr) {int left = 0, right = arr.length - 1;while (left < right) {int temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}}
}

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

http://www.whsansanxincailiao.cn/news/30340254.html

相关文章:

  • 郑州企业免费建站/网店营销策划方案ppt
  • 专业做域名的网站吗/上google必须翻墙吗
  • 如何做 网站的seo/互联网运营推广
  • 个人微信网站怎么做/广州搜索排名优化
  • 哪个网站可以做结婚请柬/百度账号申诉
  • 十年前网站开发语言/百度关键词排名怎么靠前
  • 水果网站建设/网页设计框架图
  • 机票网站建设/app有哪些推广方式
  • 空间网站打不开/百度竞价优化软件
  • 学做网站需要多久/广州百度网站快速排名
  • 城市介绍网站模板/怎么自己建立一个网站
  • 中国建设执业资格注册管理中心网站/网站seo如何优化
  • 福田网站建设效果/百度网站安全检测
  • 做网站的多钱/百度seo怎么做网站内容优化
  • 贵州专业网站建设公司/惠州百度推广排名
  • wordpress 国内主题 营销主题/优化seo系统
  • 网站的开发设计的技术/网页设计制作软件
  • 深圳招转行网站开发实习生真的吗/软文技巧
  • 顺德品牌网站建设咨询/运营培训班学费大概多少
  • html5网站正在建设中模板下载/广州优化网站排名
  • 中国网直播平台/seo搜索工具栏
  • 学校网站建设源代码/关键词查询的五种常用工具
  • 学做网站最好的网站/企业网站seo贵不贵
  • 怎样做企业手机网站建设/seo是什么职位
  • 山东专业网站建设/如何优化网页加载速度
  • 做网站怎么挣钱赚钱/百度竞价排名的优缺点
  • 深圳建一个网站多少钱/百度商家入驻
  • 做网站需要知道哪些事情/搜索引擎网络排名
  • 内容营销案例分析/江苏搜索引擎优化公司
  • 宣传片拍摄方案范本/搜索引擎优化的根本目的