贪心算法——活动安排问题
来源:互联网 发布:南海海沟大地震 知乎 编辑:程序博客网 时间:2024/05/21 09:56
贪心策略:
最早结束的活动,优先安排。
把n个活动按照结束时间非减序排列。
一.输入的活动按照结束时间的非减序
#include <iostream>using namespace std;int a[100][100];int main(){int n,i,j; cout<<"请输入活动的数目:" ; cin>>n; //n个活动 cout<<"请依次输入每个活动的起始时间和结束时间:"<<endl ; for(i=0;i<n;i++) cin>>a[i][0]>>a[i][1];i=0; int all=1; //总共可以安排的活动数for(j=1;j<n;j++){if(a[i][1]<a[j][0]){all++;i=j;}} cout<<all<<endl;return 0;}
#include <iostream>using namespace std;int a[100][100];int main(){int n,i,j,q,temp; cout<<"请输入活动的数目:" ; cin>>n; //n个活动 cout<<"请依次输入每个活动的起始时间和结束时间:"<<endl ; for(i=0;i<n;i++) cin>>a[i][0]>>a[i][1];for(i=0;i<n;i++){q=i;for(j=i+1;j<n;j++) {if(a[q][1]>a[j][1]) q=j;}temp=a[i][1];a[i][1]=a[q][1];a[q][1]=temp;temp=a[i][0]; a[i][0]=a[q][0];a[q][0]=temp;}i=0; int all=1; //总共可以安排的活动数for(j=1;j<n;j++){if(a[i][1]<a[j][0]){all++;i=j;}} cout<<all<<endl;return 0;}
三个法师康的工人每天早上6点到工厂开始到三条产品生产线上组装桔子手机。第一个工人在200时刻开始(从6点开始计时,以秒作为单位)在生产线上开始生产,一直到1000时刻。第二个工人,在700时刻开始,在1100时刻结束。第三个工人从1500时刻工作到2100时刻。期间最长至少有一个工人在生产线上工作的连续时间为900秒(从200时刻到1100时刻),而最长的无人生产的连续时间(从生产开始到生产结束)为400时刻(1100时刻到1500时刻)。
你的任务是用一个程序衡量N个工人在N条产品线上的工作时间列表(1≤N≤5000,以秒为单位)。
最长的至少有一个工人在工作的时间段
最长的无人工作的时间段(从有人工作开始计)
输入第1行为一个整数N,第2-N+1行每行包括两个均小于1000000的非负整数数据,表示其中一个工人的生产开始时间与结束时间。输出为一行,用空格分隔开两个我们所求的数。
样例输入
3200 1000700 11001500 2100
样例输出
900 400
思路:这道题写的比较早了吧,当时按照开始的时间进行排序的。贪心算法是按照结束时间排序,可自行尝试。
代码:#include <iostream>using namespace std;int a[6000][2];int main(){int n;cin>>n;for(int i=0;i<n;i++) cin>>a[i][0]>>a[i][1];int maxt=0,mint=0;for(int i=0;i<n-1;i++) //按照开始工作的时间进行排序{ for(int j=0;j<n-1-i;j++) { if(a[j][0]>a[j+1][0]) { int temp1=a[j][0]; int temp2=a[j][1]; a[j][0]=a[j+1][0]; a[j][1]=a[j+1][1]; a[j+1][0]=temp1; a[j+1][1]=temp2;} } }int l=a[0][0],r=a[0][1];maxt=r-l; for(int i=1;i<n;i++){if(a[i][0]<=r&&a[i][1]>=r) //两个工人工作的时间有交集,则更新右边界 r=a[i][1];if(a[i][0]>r) //下一个工人开始工作的时间与右边界没有交集{if(maxt<r-l) maxt=r-l; if(mint<a[i][0]-r) mint=a[i][0]-r;l=a[i][0]; r=a[i][1]; } }cout<<maxt<<" "<<mint<<endl;return 0;}
阅读全文
0 0
- 贪心算法——活动安排问题
- 贪心算法——活动安排问题
- 贪心算法——活动安排问题
- 贪心算法——活动安排问题
- 贪心算法——活动安排问题
- 【计算机算法分析】贪心算法——活动安排问题
- 贪心算法——hdu2037——活动安排问题
- 活动安排问题——贪心算法应用(2)
- 活动安排问题 贪心算法
- 活动安排问题(贪心算法)
- 活动安排问题--贪心算法
- 活动安排问题(贪心算法)
- 活动安排问题 贪心算法
- 贪心算法-活动安排问题
- 贪心算法 活动安排问题
- 活动安排问题-贪心算法
- 贪心算法-活动安排问题
- 贪心算法-活动安排问题
- 关于GitHub上的项目总结
- Android手机屏幕投影到PC
- 如何滚动更新 Service?- 每天5分钟玩转 Docker 容器技术(102)
- 基于bootstrap商品分类菜单展示
- linux安装glibc
- 贪心算法——活动安排问题
- 简易调度系统实现
- 怎样将系统拆分成微服务
- 不用xcode看iOS log的方法
- C#中,常用的加密解密方法解析
- PE、PM、PD、PR是什么岗位?
- 开源巨献:Google最热门60款开源项目
- GitHub 角色说明
- Docker使用TensorFlow Serving