最高的奖励 51Nod
来源:互联网 发布:linux文件夹同步工具 编辑:程序博客网 时间:2024/05/09 04:29
点击打开链接
先将数据存入数组 排序 终止时间小的在前 相等则奖励值大的在前
之后将数组元素依次入队 若遇到奖励值较大却终止时间已过的元素 则用其替换掉 之前已选的元素中奖励值最小的
因为每个已选元素的终止时间在其被选时都是未被超过的 因为已排序 所以后来的元素必定满足先前元素的时间限定
再用奖励值大的元素将其替换 就相当于在选取该元素的时间点改为选则奖励值大的元素
其实就是随时间流逝 你找到一个元素 你发现它更有价值 但是你在时间上已经错过了它 你就吃后悔药 回到过去 把当时选的价值小的元素扔掉 改为选这个价值更大的元素
#include <stdio.h>#include <queue>#include <algorithm>using namespace std;struct node{ friend bool operator< (node n1,node n2) { if(n1.w==n2.w) { return n1.e>n2.e; } else { return n1.w>n2.w; } } int e; long long w;};bool cmp(node n1,node n2){ if(n1.e==n2.e) { return n1.w<n2.w; } else { return n1.e<n2.e; }}int main(){ priority_queue <struct node> que; struct node tem[50001]; struct node cur; long long sum; int n,i,j,time; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) { scanf("%d%lld",&tem[i].e,&tem[i].w); } sort(tem+1,tem+n+1,cmp); time=0,sum=0; for(i=1;i<=n;i++) { if(tem[i].e>time) { que.push(tem[i]); time++; } else { que.pop(); que.push(tem[i]); } } while(!que.empty()) { cur=que.top(); que.pop(); sum+=cur.w; } printf("%lld\n",sum); } return 0;}
阅读全文
0 0
- 51 nod 最高的奖励
- 最高的奖励 51Nod
- 51NOD 1163 最高的奖励
- 51nod 1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励
- 51nod-【1163 最高的奖励】
- 51nod dai1163 最高的奖励
- 51nod 1163 最高的奖励【贪心】
- 51Nod 1163 最高的奖励
- 51nod-1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励 贪心
- 51Nod 1163 最高的奖励 ( 贪心
- 51nod 1163 最高的奖励
- 水题:51Nod 1163-最高的奖励
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励
- hdu4407(容斥原理+分解质因数)Sum
- 文章标题
- HDU
- 【WineHQ】卸载已安装的软件
- 设计模式学习笔记
- 最高的奖励 51Nod
- C语言控制台应用程序GDI绘制正弦曲线
- J
- C++ 重新定义继承而来的非虚函数
- 不可变数组的基本操作
- Java枚举类型
- Election
- wind(万得)资讯金融终端登录失败问题
- 每日一题——子树