解题思路:

(内容由ai生成)

定义活动类 (Activity):

这个类有三个属性:id(活动的标识符)、start(活动的开始时间)和finish(活动的结束时间)。

类实现了Comparable<Activity>接口,以便能够根据活动的结束时间对活动列表进行排序。

主类 (活动安排):

在main方法中,首先初始化一个计数器count为1,因为即使我们不检查第一个活动,它也会被选中(由于按结束时间排序,第一个活动总是可选的)。

使用Scanner从用户那里读取活动数量n,然后对于每个活动,读取其开始和结束时间,并将其添加到activity列表中。

使用Collections.sort(activity)对活动列表进行排序。由于Activity类实现了Comparable接口,并根据结束时间进行了比较,因此这会按结束时间的升序对活动进行排序。

初始化fin为第一个活动的结束时间。这个变量将用于跟踪最后一个被选择活动的结束时间。

遍历排序后的活动列表。对于每个活动,检查其开始时间是否大于或等于fin(即它是否与最后一个被选择的活动重叠)。如果是这样,则选择该活动(通过增加计数器并更新fin为该活动的结束时间)。

最后,打印出被选择的活动数量。

这种方法的关键在于按结束时间对活动进行排序,并始终选择下一个不与已选择活动重叠的活动。这样可以确保所选活动的数量是最大的。注意,这种贪心算法在这里是有效的,因为它利用了这样一个事实:由于活动是按结束时间排序的,所以总是选择下一个可行的活动(即开始时间晚于或等于当前fin的活动)会导致最优解。



注意事项:

参考代码:

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

class Activity implements Comparable<Activity> {
    int id;
    int start;
    int finish;

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

    @Override
    public int compareTo(Activity other) {
        return Integer.compare(this.finish, other.finish);
    }
}
public class Main {
    public static void main(String[] args) {
        int count = 1;
        Scanner sc = new Scanner(System.in);
        ArrayList<Activity> activity = new ArrayList<>();
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int s = sc.nextInt();
            int e = sc.nextInt();
            activity.add(new Activity(i+1,s,e));
        }
        Collections.sort(activity);
        int fin = activity.get(0).finish;
        for (int i = 1; i < activity.size(); i++) {
            if(activity.get(i).start >= fin){
                fin = activity.get(i).finish;
                count++;
            }
        }
        System.out.println(count);
    }
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论