51nod 1163 最高的奖励
来源:互联网 发布:9.3.3软件源 编辑:程序博客网 时间:2024/05/20 07:36
从今天开始,刷51nod上的三级和四级题,毕竟我太菜了
链接地址<-点击
方法思路:首先先对任务的结束时间进行一次排序,若时间相同,则价值大的在前面,其次,建立一个最小堆
struct node//最小堆{ int x,y; friend bool operator <(node aa,node bb) { if(aa.x==bb.x) aa.x>bb.x; return aa.y>bb.y; }}a[maxn];int cmp(node aa,node bb)//排序{ if(aa.x==bb.x) return aa.y>bb.y; return aa.x<bb.x;}
当当前时间小于该任务的结束时间的时候,说明这个任务可以完成,若当前时间等于任务完成的时间,则进行比较,因为最后一个任务一定可以完成。
for(int i=1;i<=n;i++) { if(time<a[i].x)//在结束时间之前完成该任务 { q.push(a[i]); time++; } else if(time==a[i].x) { if(a[i].y>q.top().y) { q.pop(); q.push(a[i]); } } }
总
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn=50000+100;struct node{ int x,y; friend bool operator <(node aa,node bb) { if(aa.x==bb.x) aa.x>bb.x; return aa.y>bb.y; }}a[maxn];int cmp(node aa,node bb){ if(aa.x==bb.x) return aa.y>bb.y; return aa.x<bb.x;}int main (){ int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].x>>a[i].y; } sort(a+1,a+1+n,cmp); priority_queue <node> q; int time=0; for(int i=1;i<=n;i++) { if(time<a[i].x)//在结束时间之前完成该任务 { q.push(a[i]); time++; } else if(time==a[i].x) { if(a[i].y>q.top().y) { q.pop(); q.push(a[i]); } } } long long sum=0; while(!q.empty()) { sum+=q.top().y; q.pop(); } cout<<sum<<endl;}
阅读全文
0 0
- 51NOD 1163 最高的奖励
- 51nod 1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励
- 51nod-【1163 最高的奖励】
- 51nod 1163 最高的奖励【贪心】
- 51Nod 1163 最高的奖励
- 51nod-1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励 贪心
- 51Nod 1163 最高的奖励 ( 贪心
- 51nod 1163 最高的奖励
- 水题:51Nod 1163-最高的奖励
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励
- 1163 最高的奖励-51Nod
- 51nod 1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励
- MySQL学习篇--基础篇02
- 三级缓存之LruCache 学习
- ajax
- NYOJ【96】n-1位数【水题】
- JS学习笔记2-JavaScript 语法
- 51nod 1163 最高的奖励
- C++replace函数用法
- HttpClient Post提交数据
- 新博客踏青
- php文件权限访问
- Docker命令
- 欢迎使用CSDN-markdown编辑器
- mysql数据库无法远程连接的问题解决
- android Matrix图片变换处理