SDUTアクティビティ選択1298

2174 ワード

アクティビティの選択
Time Limit: 1000MS Memory limit: 65536K
タイトルの説明
学校の大学生芸術センターは日曜日に全校の各学院の学生サークルに開放されるが、活動センターは同時に1つのサークル活動しか使用できず、各サークル活動が始まってから中断することはできない.現在、各サークルは、そのセンターを使用する活動計画(すなわち、活動の開始時刻と終了時刻)を提出している.大学生芸術センターで衝突しないできるだけ多くのサークル活動を手配できるように、アルゴリズムを設計してください.
例えば5つのイベントがあり、開始時刻と終了時刻はそれぞれ:
最適な配置シーケンスは、1,4,5です.
入力
1行目は、アクティビティ数n(0以降はn行、それぞれ1~nのアクティビティ使用中心の開始時刻aと終了時刻b(a,bは整数で0<=a,b<24,a,b入力はスペースで区切られた)を入力する.
しゅつりょく
最適なスケジュール・シーケンスに含まれる各アクティビティを出力します(アクティビティがスケジュールされた順序で、2つのアクティビティ間をカンマで区切ります).
サンプル入力
6
8 10
9 16
11 16
14 15
10 14
7 11

サンプル出力
1,5,4

古典的な貪欲アルゴリズムの問題で、次は2つの言語の実現です.
Javaコード:
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner x=new Scanner(System.in);
        int n,j,i;
        n=x.nextInt();
        Exercise[] a=new Exercise[n];
        Exercise t;
        int time=0;
        int[] s=new int[n];
        for(i=0;ia[j+1].end)
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
        i=0;
        while(i=time)
            {
                s[i]=1;
                time=a[i].end;
            }
            else
                s[i]=0;
            i++;
        }
        for(i=0;i

C言語コード:
#include 
struct node
{
    int id;
    int begin;
    int end;
};
int main()
{
    int n,j,i;
    scanf("%d",&n);
    getchar();
    struct node shi[n],t;
    int time=0;
    int s[n];
    for(i=0; ishi[j+1].end)
            {
                t=shi[j];
                shi[j]=shi[j+1];
                shi[j+1]=t;
            }
    i=0;
    while(i=time)
        {
            s[i]=1;
            time=shi[i].end;
        }
        else
            s[i]=0;
        i++;
    }
    for(i=0;i