51Nod
来源:互联网 发布:中转国际机票 知乎 编辑:程序博客网 时间:2024/05/17 05:03
1163 最高的奖励
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。
Input
第1行:一个数N,表示任务的数量(2 <= N <= 50000)第2 - N + 1行,每行2个数,中间用空格分隔,表示任务的最晚结束时间E[i]以及对应的奖励W[i]。(1 <= E[i] <= 10^9,1 <= W[i] <= 10^9)
Output
输出能够获得的最高奖励。
Input示例
74 202 604 703 401 304 506 10
Output示例
230
题意:给定n个任务 每个任务有最晚完成期限和价值 求在一定时间内可以获得的最大的价值
思路:贪心 每次找价值最大的 看有没有时间做 用num数组记录每个时间点是不是被用过了已经
#include <iostream>#include <queue>#include <cstdio>#include <stack>#define ll long longusing namespace std;int num[51000];struct z{int time;int w;bool operator < (const z &a)const{if(a.w==w)return a.time<time;return a.w>w;}};int main(){int n;scanf("%d",&n);int i;priority_queue<z>q;struct z task[n];for(i=0;i<n;i++){scanf("%d %d",&task[i].time,&task[i].w);q.push(task[i]);}int t=1,j;ll k=0,count=0;ll sum=0;for(i=0;i<n;i++){if(num[q.top().time]==0){num[q.top().time]=1;sum+=q.top().w;q.pop();}else{for(j=q.top().time;j>0;j--){if(num[j]==0){num[j]=1;sum+=q.top().w;break;}}q.pop();}}printf("%lld\n",sum);}
阅读全文
0 0
- 51Nod
- 51Nod
- 51nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51nod
- Escape
- springmvc中文乱码
- mysql数据库
- Java Web书籍推荐
- 最全Pycharm教程(16)——Pycharm编辑器功能之代码自动生成
- 51Nod
- NOIP模拟9.12
- linux重定向输入和输出
- mysql连接查询
- 会场安排问题(贪心算法,Ruby)
- 9. Palindrome Number
- 查看文件命令笔记
- centOs下配置防火墙
- Redis支持的五种数据类型