51nod 1428 活动安排问题
2015-09-14 21:18
239 查看
关于这个题目:
这个题目说实话我想了好久了,我想了好几种方法都失败了,结果最后被一种无意间想到的方法给AC了,其实感觉有点侥幸AC的感觉。。。
说说我原来的第一想法:
我原来的第一想法是这个题目实在太简单,可是我看到数据范围我醉了,数据范围太大了。不能开数组。按照我原来的做法就不行了,我的第一想法是某一个点的最大的重复次数那么就是最少需要的教室数。
再看看我的AC代码(虽然不值得学习):
我的想法,是按照起点排序,原来的贪心做法是按照终点排序,不过既然要全部用完这些节点,那么既不需要在意这么多了。我的想法还是贪心,每次都选出当前的最佳方案。那么就可以求解,下面给出代码。仅供参考,(我现在想到了另一种想法)。。
这个题目说实话我想了好久了,我想了好几种方法都失败了,结果最后被一种无意间想到的方法给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); } }
相关文章推荐
- 异常处理
- 【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)
- Javascript设计模式与开发实践读书笔记(1-3章)
- hihocoder #1195 高斯消元一
- APP设计中“登录”按钮的高度多少才好呢?经验总结!
- 虚基类
- 初识工作流
- Android--Touch 事件的分发和消费机制
- CSS-页面布局
- js选择checkbox
- Git 学习笔记
- 二分图小结
- 老王说ROS
- localdb下载地址
- CSS-页面布局
- 每日一“结”(7)
- nullptr和NULL
- newlisp web site benchmark
- 圆通数据库泄露
- Leetcode--Divide Two Integers