51nod 1428 活动安排问题

来源:互联网 发布:qq晒米软件 编辑:程序博客网 时间:2024/05/16 17:33

关于这个题目:

这个题目说实话我想了好久了,我想了好几种方法都失败了,结果最后被一种无意间想到的方法给AC了,其实感觉有点侥幸AC的感觉。。。

说说我原来的第一想法:

我原来的第一想法是这个题目实在太简单,可是我看到数据范围我醉了,数据范围太大了。不能开数组。按照我原来的做法就不行了,我的第一想法是某一个点的最大的重复次数那么就是最少需要的教室数。

再看看我的AC代码(虽然不值得学习):

我的想法,是按照起点排序,原来的贪心做法是按照终点排序,不过既然要全部用完这些节点,那么既不需要在意这么多了。我的想法还是贪心,每次都选出当前的最佳方案。那么就可以求解,下面给出代码。仅供参考,(我现在想到了另一种想法)。。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{    int a,b;}A[10005];int cmp(node A,node B){    return A.a<B.a;}int vis[10005];int main(void){    int i,j,n,cnt,t,ans;    while(scanf("%d",&n)!=EOF){        for(i=0;i<n;i++)            scanf("%d %d",&A[i].a,&A[i].b);        sort(A,A+n,cmp);        memset(vis,0,sizeof(vis));        ans=0;        cnt=0;        while(cnt!=n){            t=-1;            for(i=0;i<n;i++){                if(!vis[i]){                    if(A[i].a>=t){                        t=A[i].b;                        vis[i]=1;                        cnt++;                    }                }            }            ans++;        }        printf("%d\n",ans);    }}


0 0