链接

[http://codeforces.com/group/1EzrFFyOc0/contest/913/problem/D]

题意

给你n个题目,考试时间T,对于每个问题都有一个ai,以及解决所花的时间,

让你找到一个做题(选择k个题去做)的方案,使得最后ai<=k的情况最多

分析

其实我刚开始不会的,后来看大佬的才会的

我们先利用vector数组根据ai大小分类,然后对于每一类肯定是时间少的有限考虑,所以考虑用优先队列。

那么我们只要去由n到0枚举即可。

先把ai为i的题目入队列,然后如果此时队列里的题目数大于i的话,我们需要把时间大的出队列即可(因为队列中的题目ai一定大于等于i,删去哪个都一样)。

过程中统计总时间sum确保不超过T即可。

然后再枚举的过程中只要q.size()==i&&sum<=T即满足条件。

具体看代码吧

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long const int maxn=2e5+10;
vector<pair<int,int> > v[maxn];
priority_queue<pair<int,int> > q;//优先队列默认最大堆
int n,T;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0); int a,c,i;
//freopen("in.txt","r",stdin);
cin>>n>>T;
for(i=1;i<=n;i++)
{
cin>>a>>c;
v[a].push_back(make_pair(c,i));//把ai一样的存在一起
} ll sum=0;
for(i=n;i>=0;i--){
for(auto u:v[i]){
q.push(u);
sum+=u.first;
} while(q.size()>i){
sum-=q.top().first;
q.pop();//把最耗时的出队
} if(q.size()==i&&sum<=T){//贪得最大满足条件,因为往后i--不可能比现在大了
cout<<i<<' '<<i<<endl;
while(q.size()){
cout<<q.top().second<<' ';
q.pop();
}
cout<<endl;
return 0;
}
} }

D. Too Easy Problems的更多相关文章

  1. 解题:AT2064 Many Easy Problems&EXNR #1 T3 两开花

    题面 两道题比较像,放在一起写了,后者可以看成前者的加强版 (sto ztb orz) 先看AT那道题 考虑计算每个点的贡献,用容斥计算:每个点没有贡献当且仅当选的所有点都在以他为根时的一个子节点的子 ...

  2. Codeforces 913D - Too Easy Problems

    913D - Too Easy Problems 思路:二分check k 代码: #include<bits/stdc++.h> using namespace std; #define ...

  3. 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT

    [题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...

  4. 【CodeForces】913 D. Too Easy Problems

    [题目]D. Too Easy Problems [题意]给定n个问题和总时限T,每个问题给定时间ti和限制ai,当解决的问题数k<=ai时问题有效,求在时限T内选择一些问题解决的最大有效问题数 ...

  5. AtcoderGrandContest 005 F. Many Easy Problems

    $ >AtcoderGrandContest \space 005 F.  Many Easy Problems<$ 题目大意 : 有一棵大小为 \(n\) 的树,对于每一个 \(k \i ...

  6. Codeforces B. Too Easy Problems

    题目描述: time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...

  7. 【AGC 005F】Many Easy Problems

    Description One day, Takahashi was given the following problem from Aoki: You are given a tree with ...

  8. AtCoder - 2064 Many Easy Problems

    Problem Statement One day, Takahashi was given the following problem from Aoki: You are given a tree ...

  9. 【AGC005F】Many Easy Problems FFT 容斥原理

    题目大意 给你一棵树,有\(n\)个点.还给你了一个整数\(k\). 设\(S\)为树上某些点的集合,定义\(f(S)\)为最小的包含\(S\)的联通子图的大小. \(n\)个点选\(k\)个点一共有 ...

随机推荐

  1. .NET Core tasks.json 简介

    1.执行命令:dotnet> dotnet new console -o myApp 2.tasks.json文件配置: { "version": "2.0.0&q ...

  2. Python基础知识:列表

    1.pop(i)删除列表任意位置元素,并继续使用它,如果括号为空,默认删除末尾 #pop()函数 guests=['Liming','Liuhan','Hanjieming'] for guest i ...

  3. 17秋 软件工程 Alpha展示博客

    成员简介 姓名 个人简介 博客地址 郑世强 郑世强,计算机三班,了解java web端和Android端编程,使用过Spring MVC和Spring Boot开发商业程序,Android端学习了rx ...

  4. python 在windows下的 虚拟环境

    解决 python 环境问题 windows 下安装 pip install virtualenv virtualenv的基本使用 1.1 创建虚拟环境 virtualenv venv 为环境指定Py ...

  5. cenos下配置Apache+PHP最新版7.1.6+MySQL最新版(5.7.18)

    一.安装Apache,略. 二.安装PHP 1.下载php7 wget -O php7.tar.gz http://cn2.php.net/distributions/php-7.1.6.tar.gz ...

  6. 30个你 “ 不可能全部会做 ” 的javascript题目

    1,以下表达式的运行结果是: ["1","2","3"].map(parseInt) A.["1","2&qu ...

  7. PHP开发小技巧③—实现多维数组转化为一维数组

    在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...

  8. MySql常用命令集Mysql常用命令5

    九. 交叉查询 交叉查询可以对数据进行总和,平均,计数或其他总和计算法的计算,这些数据通过 两种信息进行分组:一个显示在表的左部,另一个显示在表的顶部. Microsoft Jet SQL 用TRAN ...

  9. esp8266(2) 智能配置

    http://www.arduino.cn/thread-46594-1-1.html http://blog.csdn.net/sadshen/article/details/47049129 ht ...

  10. M100 X3云台安装

    http://bbs.dji.com/thread-38587-1-1.html