超级伊恩 2024-03-26 08:28 采纳率: 45.5%
浏览 1

请问用Java怎么解

Description

YY是一名研究生导师,最近YY科研组里新收了k位学生,而新生的主要任务之一就是文献阅读。现在YY要将n篇论文全部分配给这k位学生阅读,且每篇论文只能分配给一位学生。每篇论文的阅读时间用一个整数数组papers表示,即papers[i]表示读完第i篇论文要花费的时间。学生的阅读时间是读完这n篇论文花费时间的总和。请你给这k个学生分配论文,使学生中的最大阅读时间得以最小化。

Input

第一行,两个整数n和k,表示数组papers的数量和学生人数(1≤k≤n≤12)

第二行,n个整数表示数组papers表示每篇文章对应的阅读时间(1≤papers[i]≤10^8)

Output

img

返回一个整数,表示分配方案中尽可能最小的最大阅读时间。

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-03-26 08:29
    关注

    m0_74948836 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    根据题目描述,我们需要将n篇论文分配给k个学生阅读,每篇论文只能分配给一位学生。我们的目标是使学生中的最大阅读时间最小化。下面给出一个解决方案:

    1. 将论文阅读时间数组papers按照从大到小的顺序进行排序。
    2. 定义一个长度为k的数组assistantTimes,用于记录每位学生的阅读时间。
    3. 遍历排序后的papers数组,依次将每篇论文分配给阅读时间最少的学生。
    4. 每次将论文分配给学生时,将该学生的阅读时间与该论文的阅读时间相加,并更新assistantTimes数组中该学生的阅读时间。
    5. 最后返回assistantTimes数组中的最大值即为分配方案中的最小的最大阅读时间。

    下面是Java的代码实现:

    import java.util.Arrays;
    
    public class Main {
        public static void main(String[] args) {
            int[] papers = {3, 3, 3, 2, 2, 2, 1, 1, 1};
            int k = 3;
            int result = minMaxReadingTime(papers, k);
            System.out.println(result);
        }
    
        public static int minMaxReadingTime(int[] papers, int k) {
            Arrays.sort(papers);
            int[] assistantTimes = new int[k];
            int index = papers.length - 1;
    
            for (int i = 0; i < papers.length; i++) {
                int minReadingTime = Integer.MAX_VALUE;
                int minIndex = 0;
    
                for (int j = 0; j < k; j++) {
                    if (assistantTimes[j] + papers[index] < minReadingTime) {
                        minReadingTime = assistantTimes[j] + papers[index];
                        minIndex = j;
                    }
                }
    
                assistantTimes[minIndex] += papers[index];
                index--;
            }
    
            int maxReadingTime = 0;
            for (int time : assistantTimes) {
                maxReadingTime = Math.max(maxReadingTime, time);
            }
    
            return maxReadingTime;
        }
    }
    

    希望可以帮到你!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月26日