B - Planning 早训 贪心
时间:2019-08-23
本文章向大家介绍B - Planning 早训 贪心,主要包括B - Planning 早训 贪心使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
B - Planning
这个题目我知道要贪心,也知道怎么贪,但是写不出来,感觉自己好菜。
这个题目要用优先队列维护。
题目大意是飞机延误,不同的飞机每次延误一分钟,它的代价不同,然后问,怎么安排才能使飞机延误的代价最小,
唯一的限制就是飞机只能往后延误,不能提前。
然后看了网上的题解,首先我们把 1~ k 时候起飞的飞机直接放入优先队列,队列按照代价从大到小排序,
然后再考虑k+1~n的飞机,每次放入一架飞机,我们就可以求出一架在这个时刻最优的飞机。
为什么这么贪心是对的呢,首先如果前面的飞机每一分钟的代价很大,那这个位置肯定是最优的,
如果后面的飞机代价很大,因为后面的每一架飞机都可以就选择它原来起飞的时刻,所以肯定比这个时刻优,而且后面的飞机不能提前起飞。
意思就是这个时刻只能飞比这个时间小的所有的飞机。
#include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> #include <vector> #include <iostream> #include <string> #define inf 0x3f3f3f3f #define inf64 0x3f3f3f3f3f3f3f3f using namespace std; const int maxn = 6e5 + 10; typedef long long ll; struct node { int mon, id; node(int mon = 0, int id = 0) :mon(mon), id(id){} bool operator<(const node& a)const { return a.mon > mon; } }ex[maxn]; int ans[maxn]; priority_queue<node>que; int main() { int n, k; scanf("%d%d", &n, &k); for(int i=1;i<=k;i++) { int x; scanf("%d", &x); que.push(node(x, i)); } ll res = 0; for(int i=k+1;i<=n;i++) { int x; scanf("%d", &x); que.push(node(x, i)); int a = que.top().id; int b = que.top().mon; res += abs(i - a)*1ll*b; ans[a] = i; que.pop(); } int i = n + 1; while(!que.empty()) { int a = que.top().id, b = que.top().mon; res += abs(i - a)*1ll*b; ans[a] = i; que.pop(); i++; } printf("%lld\n", res); for (int j = 1; j <= n; j++) printf("%d ", ans[j]); return 0; }
原文地址:https://www.cnblogs.com/EchoZQN/p/11398747.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 从零开始搭建 VuePress 静态博客
- 算法菜鸟的烂笔头
- 防火墙(iptables)
- 短视频商城源码,安卓几种弹窗方法
- Automl框架katib浅析
- NAS Network Attached Storage
- es6 随性学习之 字符串 String
- MongoDB内核:副本集选举过程分析
- MongoDB内核:主从同步之源码剖析
- OpenGL ES 帧缓冲区位块传送
- OAuth 2.0 单元测试解决方案
- 「性能提升」扩展 Spring Cache 支持多级缓存
- 如何以源码形式运行Nacos Server
- Spring Boot 2.4 配置文件将加载机制大变化
- OpenGL ES 多目标渲染(MRT)