贪心-区间规划

题目描述

有N项工作,每项工作分别在Si时间开始,在Ti时间结束。对于每项工作,你都可以选择参与与否。如果选择了参与,那么自始至终都必须全程参与。此外,参与工作的时间段不能重叠(即使是开始的瞬间和结束的瞬间重叠也是不允许的)。

目标是尽可能参与可能多的工作,那么最多能参与多少项工作?
样例输入

n = 5, s= {1,2,4,6,8}, t={3,5,7,9,10}
样例输出

3 (选取工作1、3、5)

谁先结束先选谁

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int count=1;//最多可参与的工作数
        Task[] t=new Task[] {new Task(1, 3),new Task(8,10),
                new Task(4,7),new Task(6,9),new Task(2,5)};
        Arrays.sort(t);
        for(int i=0;i<t.length;++i) {
            System.out.println(t[i]);
        }
        int end=0;
        for(int i=1;i<t.length;++i) {
            if(t[end].et<t[i].st) {
                count+=1;
                end=i;
            }

        }
        System.out.println(count);
    }
}
class Task implements Comparable<Task>{

    int st;
    int et;

    public Task(int st, int et) {
        super();
        this.st = st;
        this.et = et;
    }

    @Override
    public int compareTo(Task o) {
        return this.et-o.et;
    }
    @Override
    public String toString() {
        return st+","+et;
    }
}
发布了89 篇原创文章 · 获赞 42 · 访问量 3667

猜你喜欢

转载自blog.csdn.net/weixin_43673156/article/details/104999819