【codevs 2610】活动选择
来源:互联网 发布:mac查看系统版本 编辑:程序博客网 时间:2024/06/05 21:52
题目描述 Description
假设有一个需要使用某一资源的n(n≤1000)个活动组成的集合S,S={1,…,n}。该资源一次只能被一个活动占有,每一个活动有一个开始时间bi和结束时间ei(bi≤ei)。若bi>ej或者bj>ei,则活动i和活动j兼容。
你的任务是是:选择由互相兼容的活动组成的最大集合。
输入描述 Input Description
共n+1行,其中第1行为n,第2行到第n+1行表示n个活动的开始时间和结束时间(中间用一个空格隔开),格式为:
n
b1 e1
…….
bn en
输出描述 Output Description
共有两行,第1行为满足要求的活动占用的时间t,第2行为最大集合中的活动序号,每个序号之间用一个空格隔开。
样例输入 Sample Input
11
3 5
1 4
12 14
8 12
0 6
8 11
6 10
5 7
3 8
5 9
2 13
样例输出 Sample Output
14
2 3 6 8
数据范围及提示 Data Size & Hint
数据范围不大,不用考虑。
贪心
按照结束时间早晚排个序
兼容则加上,否则不加
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;int n,k,sum;int d[maxn],s[maxn];struct p{ int s,e,g;}a[maxn];bool cmp(p a,p b){ return a.e<b.e;}int main(){ int l=1; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].s,&a[i].e); a[i].g=i; } sort(a+1,a+1+n,cmp); k++; d[k]=a[1].g; sum+=a[1].e-a[1].s+1; for(int i=2;i<=n;i++) { if(a[i].s>a[l].e) { l=i; k++; d[k]=a[i].g; sum+=a[i].e-a[i].s+1; } } cout<<sum<<'\n'; for(int i=1;i<=k;i++) { s[i]=d[i]; } sort(s+1,s+k+1); for(int i=1;i<=k;i++) { cout<<s[i]<<' '; } cout<<'\n'; return 0;}
然而。。。
测试数据有误??
以后做题还是先看看通过率吧。。
233.
阅读全文
0 0
- 【codevs 2610】活动选择
- codevs 2610 活动选择(贪心)(测试数据有错)
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 活动选择
- 让测试人员心酸的五大谣传
- 研磨设计模式之迭代器业务场景
- over overRank区别
- 费马小定理
- 快速排序算法及python代码实现
- 【codevs 2610】活动选择
- git常用内容整理
- 外校 2.3 B 君的数组 (array)
- luogu2911 [USACO08OCT]牛骨头Bovine Bones
- 【codevs 1069】关押罪犯
- 【JavaScript】5.面试题一原型和原型链
- luogu2955 [USACO09OCT]奇数偶数Even? Odd?
- jq实现动态元素绑定
- 【codevs 2597】团伙