会场安排问题-记录最后一个测试点错因(暂无答案)

题目来源:王晓东《算法设计与分析》

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的
贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个
顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小
会场数。)

输入格式:

第一行有 1 个正整数k,表示有 k个待安排的活动。
接下来的 k行中,每行有 2个正整数,分别表示 k个待安排的活动开始时间和结束时间。时间
以 0 点开始的分钟计。

输出格式:

输出最少会场数。

输入样例:

5
1 23
12 28
25 35
27 80
36 50 

输出样例:

在这里给出相应的输出。例如:

3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


经过调试后仍然无法通过最后一个测试点,只能找老师解决这个问题:

#include 
using namespace std;

int place[1000];

struct Activity{
    int s;
    int e;
};

bool cmp(Activity a,Activity b)
{
    return a.e=place[j]){
                place[j]=act[i].e;
//                cout<>k;
    Activity act[k];
    for(int i=0;i>act[i].s>>act[i].e;
    }
//    cout<

老师的答复,尴尬了:

你的方法是:先按结束时间排序,然后尽可能多的将任务安排给第一个会场,然后,再将剩下的任务尽可能多的分配给第二个会场。。。
但这个算法本身是不正确的。例如:
活动1: 开始时间1 结束时间5
活动2: 3 7
活动3:9 10
活动4:6 13
活动5: 14 18
按照你的思路:应该需要三个会场分别分配1 3 5,2 ,4
而最优解是两个会场:1 4 5,2 3


后续更新正确代码

你可能感兴趣的:(算法,贪心算法)