51Nod-1163-最高的奖励
来源:互联网 发布:淘宝网男士休闲运动鞋 编辑:程序博客网 时间:2024/05/23 19:24
ACM模版
描述
题解
这是一道十分不错的贪心问题,有O(nlogn)
和O(n*α(n))
解法。
One O(nlogn)
算法:
将最晚结束时间升序排序,第n个任务最晚时间如果大于已经消耗的时间,则可以算入总和,若不大于可以尝试替换掉已经算入总和中的最小奖励的任务,条件是这件任务的奖励要大于要替换掉的任务的奖励。使用优先队列维护。
Two O(n*α(n))
算法:
将任务奖励从大到小排序,然后遍历,如果有可完成任务的时间,则完成此任务,奖励算入总和即可。这里的可完成任务的时间用并查集维护即可,F[x]=t;
表示最晚完成时间为x的任务可以在t时刻完成,初始化为F[x]=x;
。
代码
One:
#include <iostream>#include <algorithm>#include <queue>#include <cstdio>typedef long long ll;using namespace std;const int MAXN = 5e4 + 10;struct task{ int times; int cost;} t[MAXN];bool cmp(const task a,const task b){ return a.times < b.times;}int main(){ int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d%d", &t[i].times, &t[i].cost); } sort(t, t + n, cmp); // 优先队列维护 priority_queue<int, vector<int>, greater<int> > pq; long long ans = 0; for (int i = 0; i < n; i++) { int k = t[i].cost; if (t[i].times > pq.size()) // pq.size这里理解代表时间点 { ans += k; pq.push(k); } else // 时间点有冲突,把cost最小删除 { ans += k; pq.push(k); int minn = pq.top(); ans -= minn; pq.pop(); // 删除 } } printf("%lld\n", ans); return 0;}
Two:
#include <iostream>#include <algorithm>#include <cstdio>#include <queue>using namespace std;const int MAXN = 5e4 + 5;struct task{ int times; int cost;} Task[MAXN];// 使用并查集int F[MAXN]; // F[i] = j:最晚结束时间i可以在j时间完成bool cmp(const task a, const task b){ return a.cost > b.cost;}int find(int x){ if (x <= 0) { return -1; } if (F[x] == x) { return F[x] = x - 1; } else { return F[x] = find(F[x]); // 路径压缩 }}int main(){ int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d%d", &Task[i].times, &Task[i].cost); F[i] = i; } sort(Task, Task + n, cmp); long long ans = 0; for (int i = 0; i < n; i++) { int k = Task[i].times; if (find(k) >= 0) { ans += Task[i].cost; } } printf("%lld\n", ans); return 0;}
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 最高的奖励
- 51nod 1163 最高的奖励
- 1163 最高的奖励-51Nod
- 51nod 1163 最高的奖励(贪心)
- iOS 报错:objc[1334]: Class X ... One of the two will be used. Which one is undefined
- 【HDU】-1176-免费馅饼(DP,好)
- 整洁代码-----有意义的命名
- 分布式队列编程模型
- Android 读取<meta-data>元素的数据
- 51Nod-1163-最高的奖励
- 跟随键盘变化的布局
- HTML <form> 标签的 enctype 属性
- 杭电oj--1018 Big Number
- jsp文件中格式化时间
- UFLDL stack2params.m
- 关于tomcat中全局参数context-param中的一点了解
- Shark, Spark SQL, Hive on Spark, 以及SQL on Apache Spark的未来
- __VA_ARGS__