贪心算法解决活动安排问题:最大化礼堂活动数量

学校礼堂每天都会有许多活动,但有时这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能地安排更多的活动,请问他该如何安排?

这个问题可以用贪心算法来解决。贪心算法是一种在每一步选择中都选择当前最优方案,并期望最终得到全局最优解的算法。

算法步骤

  1. 排序: 首先,将所有活动按照结束时间进行升序排序。
  2. 选择: 从第一个活动开始,选择结束时间最早的活动,并将其加入安排计划。
  3. 循环: 遍历剩余活动,选择与当前安排计划中最后一个活动的结束时间不冲突的,且结束时间最早的活动。
  4. 重复步骤3: 直到所有活动都被考虑。

Java 代码实现

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int M = scanner.nextInt();
        while (M > 0) {
            M--;
            int N = scanner.nextInt();
            ArrayList<Activity> activities = new ArrayList<Activity>();
            for (int i = 0; i < N; i++) {
                int start = scanner.nextInt();
                int end = scanner.nextInt();
                activities.add(new Activity(start, end));
            }
            Collections.sort(activities, new Comparator<Activity>() {
                public int compare(Activity o1, Activity o2) {
                    return o1.end - o2.end;
                }
            });
            int cnt = 0;
            int endtime = -1;
            for (int i = 0; i < activities.size(); i++) {
                if (activities.get(i).start >= endtime) {
                    endtime = activities.get(i).end;
                    cnt++;
                }
            }
            System.out.println(cnt);
        }
    }
}

class Activity {
    int start;
    int end;

    public Activity(int start, int end) {
        this.start = start;
        this.end = end;
    }
}

输入格式

第一行是一个整型数 m (m<100) 表示共有 m 组测试数据。 每组测试数据的第一行是一个整数 n (1<n<10000) 表示该测试数据共有 n 个活动。 随后的 n 行,每行有两个正整数 Bi, Ei (0<=Bi, Ei<10000), 分别表示第 i 个活动的起始与结束时间(Bi<=Ei)。

输出格式

对于每一组输入,输出最多能够安排的活动数量。 每组的输出占一行。

输入样例

2
2
1 10
10 11
3
1 10
9 11
11 20

输出样例

2
2

总结

贪心算法在活动安排问题中可以有效地选择出最大数量的活动,其时间复杂度为 O(n log n),其中 n 为活动数量。通过排序和选择活动,算法能够最大化礼堂活动数量,帮助小刘有效地安排学校礼堂的活动计划。

贪心算法解决活动安排问题:最大化礼堂活动数量

原文地址: https://www.cveoy.top/t/topic/nRlT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录