ACM_程序设计竞赛:贪心算法:区间问题
2016-04-12 01:34
706 查看
有n项工作,每项工作分别在 sis_i时间开始,tit_i时间结束。对于每项工作你选择参与与否,如果选择 了参与,那么自始至终就必须全程参与。参与工作的时间段不可以重复。(开始的瞬间和结束重复也不可以)
尽可能多的参与工作,可以参与多少。
尽可能多的参与工作,可以参与多少。
/* ------------------------------------ [输入] n=5, s={1,2,,4,6,8},t={3,5,7,9,10} ------------------------------------ [输出] 3(选择1,3,5) ------------------------------------- [算法] 在可选的时间内,每次都选择结束时间最早的工作 */ #include<iostream> #include<algorithm> using namespace std; const int MAX_N=100000; int N; //时间段数 int S[MAX_N],T[MAX_N]; pair<int,int> itv[MAX_N]; //用于工作排序的pair数组 bool cmp(const pair<int,int> &a,const pair<int,int> &b) //输入性参数,不可改变 { return a.first < b.first; } void solve() { //对pair字典序比较 // 将T存入frist,S存入second for(int i=0;i<N;i++){ itv[i].first=T[i]; itv[i].second=S[i]; } std::sort(itv,itv+N,cmp); //t是最后所选工作的结束时间 int ans=0,t=0; for(int i=0;i<N;i++){ if(t<itv[i].second){ ans++; t=itv[i].first; } } cout<<ans<<endl; } int main(int ac,char* av[]) { while(cin>>N){ for(int i=0;i<N;i++){ cout<<"输入"<<i; cin>>S[i]; cin>>T[i]; } solve(); } return 0; }
相关文章推荐
- Android常用的Gradle配置和加速编译
- Python 数据库MySQL中取出数据
- 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
- CSS3实战之多列
- 在Mac下配置php开发环境:Apache+php+MySql
- 关于js封装框架类库之选择器引擎(二)
- connect函数简析
- UEFI模式下安装Windows 10和Fedora 23双系统碰到的问题和解决办法
- oracle学习 第一章 简单的查询语句 ——04
- 碰撞检测之OBB-OBB的SweepTest
- 细说Linq之Aggregate
- Android实现沉浸式状态栏
- 顺时针打印矩阵
- 体验Android ORM之DBFlow
- Java国际化程序
- MySQL 学习笔记(5)MySQL常用函数汇总
- 把二元查找树转变成排序的双向链表
- 如何利用Nginx的缓冲、缓存优化提升性能
- SHELL笔记之以文件之名(三)
- 磁盘IO:缓存IO与直接IO