C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列
2 seconds
256 megabytes
standard input
standard output
You have a playlist consisting of nn songs. The ii-th song is characterized by two numbers titi and bibi — its length and beauty respectively. The pleasure of listening to set of songs is equal to the total length of the songs in the set multiplied by the minimum beauty among them. For example, the pleasure of listening to a set of 33 songs having lengths [5,7,4][5,7,4] and beauty values [11,14,6][11,14,6] is equal to (5+7+4)⋅6=96(5+7+4)⋅6=96.
You need to choose at most kk songs from your playlist, so the pleasure of listening to the set of these songs them is maximum possible.
The first line contains two integers nn and kk (1≤k≤n≤3⋅1051≤k≤n≤3⋅105) – the number of songs in the playlist and the maximum number of songs you can choose, respectively.
Each of the next nn lines contains two integers titi and bibi (1≤ti,bi≤1061≤ti,bi≤106) — the length and beauty of ii-th song.
Print one integer — the maximum pleasure you can get.
4 3
4 7
15 1
3 6
6 8
78
5 3
12 31
112 4
100 100
13 55
55 50
10000
In the first test case we can choose songs 1,3,41,3,4, so the total pleasure is (4+3+6)⋅6=78(4+3+6)⋅6=78.
In the second test case we can choose song 33. The total pleasure will be equal to 100⋅100=10000100⋅100=10000.
这个题目要好好想想,一开始以为是dp,因为数据太大可以发现肯定不是dp,后来想到用贪心,但是并不会写。。。
实际上这个是贪心+优先队列,用优先队列来处理,然后进行贪心。
优先队列怎么处理呢,首先我们对b进行排序,b大的放在前面,然后把每一个数的t值都放进队列里面,t越小放在越前面,
然后如果这个队列的size大于k,就要清除头部的那个元素,但是这个时候之后的取最大值并不会受到影响,因为如果是刚刚放进去
的被pop出来了,那sum肯定没有变大,而且同时b变小了,所以这个时候就不会对这里进行转移,如果是别的元素pop出来了,
那就没有影响了。
这里要想清楚为什么是对b进行排序,想清楚为什么对b进行排序之后进行优先队列的处理,就是最优的。
这个我之前没有想清楚,所以就写题目的时候就有各种天马行空的想法。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
const int maxn = 3e5 + 100;
struct node
{
int t, b;
node(int t=0,int b=0):t(t),b(b){}
bool operator<(const node&a)const
{
if (a.b == this->b) return a.t < this->t;
return a.b < this->b;
}
}exa[maxn];
priority_queue<ll, vector<ll>, greater<ll>>que;
int main()
{
ll sum = 0,ans=0;
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) scanf("%d%d", &exa[i].t, &exa[i].b);
sort(exa + 1, exa + 1 + n);
for(int i=1;i<=n;i++)
{
sum += exa[i].t;
que.push(exa[i].t);
if(que.size()>k)
{
sum -= que.top();
que.pop();
}
//printf("exa[%d]=%d %lld %lld\n", i, exa[i].t, sum,ans);
ans = max(ans, sum*exa[i].b);
}
printf("%lld\n", ans);
return 0;
}
C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列的更多相关文章
- Educational Codeforces Round 62 (Rated for Div. 2) - C Playlist
当时题意看错了...不过大致思路是对的,唯一没有想到的就是用优先队列搞这个东西,真是不该啊... 题意大概就是,有N首歌,N首歌有两个东西,一个是长度Ti,一个是美丽值Bi,你最多可以选择K首歌, 这 ...
- Educational Codeforces Round 62 (Rated for Div. 2)C
题目链接 :C. Playlist #include<bits/stdc++.h> using namespace std; #define maxn 300005 #define LL ...
- Educational Codeforces Round 62 (Rated for Div. 2) Solution
最近省队前联考被杭二成七南外什么的吊锤得布星,拿一场Div. 2恢复信心 然后Div.2 Rk3.Div. 1+Div. 2 Rk9,rating大涨200引起舒适 现在的Div. 2都怎么了,最难题 ...
- Educational Codeforces Round 62 (Rated for Div. 2)
A. Detective Book 题意:一个人读书 给出每一章埋的坑在第几页可以填完 . 一个人一天如果不填完坑他就会一直看 问几天能把这本书看完 思路:模拟一下 取一下过程中最大的坑的页数 如 ...
- Educational Codeforces Round 62 (Rated for Div. 2) C 贪心 + 优先队列 + 反向处理
https://codeforces.com/contest/1140/problem/C 题意 每首歌有\(t_i\)和\(b_i\)两个值,最多挑选m首歌,使得sum(\(t_i\))*min(\ ...
- Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
#include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...
- C. Brutality Educational Codeforces Round 59 (Rated for Div. 2) 贪心+思维
C. Brutality time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
随机推荐
- 【Java每日一题】20170328
20170327问题解析请点击今日问题下方的“[Java每日一题]20170328”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...
- Java 中变量初始化、子类和父类构造器调用的顺序
先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int inde ...
- JavaScript机器学习之KNN算法
译者按: 机器学习原来很简单啊,不妨动手试试! 原文: Machine Learning with JavaScript : Part 2 译者: Fundebug 为了保证可读性,本文采用意译而非直 ...
- js对HTML字符转义与反转义
注意: 在编写html时,经常需要转义,才能正常显示在页面上. 并且,还可以防止xss. 解决方案: 一, 使用正则: 使用正则转码: var value = document.getElementB ...
- 洛谷P3178 [HAOI2015]树上操作
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...
- 【Wyn Enterprise BI知识库】 什么是商业智能 ZT
商业智能(Business Intelligence,BI),又称商务智能,指用现代数据仓库技术.在线分析处理技术.数据挖掘和数据展现技术进行数据分析以实现商业价值. 图1:商业智能(BI)系统 商业 ...
- 数据库连接池(基于MySQL数据库)
使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的? 通过代码: conn=DriverManager.getConnection(url, username, password); JDBC ...
- Python 对服务器返回数据编码进行判断之chardet
对服务器返回数据编码进行判断之chardet by:授客 QQ:1033553122 测试环境 Win764Bit chardet-2.3.0 下载地址1:https://pypi.pytho ...
- Python高级特性:切片
切片的目的是实现取一个list或tuple的部分元素 学习自廖雪峰,个人理解如下: 取列表L的前三个元素 >>> L = ['Michael', 'Sarah', 'Tracy', ...
- katalon之web文件上传
参考:https://docs.katalon.com/katalon-studio/docs/webui-upload-file.html#example- 适用范围:tag=input, type ...