题目描述

本次印度编程训练营(Indian Programming Camp,IPC)共请到了 N 名教练。训练营的日
程安排有 M 天,每天最多上一节课。第 i 名教练在第 Di 天到达,直到训练营结束才离开。第 i 名
教练希望上 Ti 节课。要是少上了课,那么教练会感到扎心,每少上一节,扎心值就会加 Si。
作为主办方,你希望最小化所有教练的扎心值之和。

数据范围

1 ≤ T ≤ 10
• 1 ≤ N, D, Si ≤ 1e5
• 1 ≤ Di
, Ti ≤ D

输入格式

输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。
每组数据的第一行包含两个整数 N 和 M。接下来 N 行,每行包含三个整数 Di, Ti, Si。

输出格式

对于每组数据,输出一行,包含一个整数,代表扎心值之和的最小值。

样例输入

3
2 3
1 2 300
2 2 100
2 3
1 1 100
2 2 300
2 3
3 2 150
1 1 200

样例输出

100
0
150

=====================================================================================================================================

比赛时未做出的题目

学长的题解:

贪心的想每一天让扎心值最大的教练上课 ,所以需要一个数据结构支持查询最大值,插入元素,删除最大值。

优先队列priority_queue可以完美实现这些要求。

=====================================================================================================================================

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + ;
struct Node{
int beg,day,s;
}node[N];
bool operator<(Node a,Node b){ //通过这个方法,自定义优先队列的顺序
return a.s < b.s;
}
priority_queue<Node> que;
bool cmp(Node a,Node b){
return a.beg < b.beg;
}
int main()
{
int T; scanf("%d",&T);
while(T--)
{
int n,D;
scanf("%d %d",&n,&D);
for(int i = ; i <= n; ++i) scanf("%d %d %d",&node[i].beg,&node[i].day,&node[i].s);
sort(node+,node+n+,cmp);
int now = ;
//从每一天开始,每一天优先让能在这一天上课的扎心值最高的教师上课
for(int i = ; i <= D; ++i){
//将能在第i天上课的教师加入优先队列
while(now <= n && node[now].beg == i) que.push(node[now]),++now;
//加入完毕之后,让扎心值最高的教师上这一天的课
if(!que.empty()){
Node temp;
temp = que.top();
que.pop();
--temp.day; //这位老师想要上的天数-1
if(temp.day) que.push(temp);
}
}
long long sum = ;
//遍历优先队列
while(!que.empty()) sum += (long long)que.top().day*que.top().s,que.pop();
printf("%lld\n",sum);
}
}

最新文章

  1. Iterate Files by Tcltk
  2. Loadrunner中Throughput(吞吐量)的分析与计算
  3. setrendertraget 上下颠倒
  4. LinearLayout和RelativeLayout
  5. 【无聊放个模板系列】BZOJ 3172 (AC自动机)
  6. java迭代器demo
  7. 爆炸!iOS资源大礼包(持续更新...)
  8. C++之文件输入输出
  9. html5表单和伪类
  10. QTP11完美破解小笔记
  11. 【LeetCode】49. Group Anagrams
  12. JAVA - 工厂模式
  13. Python3 的函数(2)
  14. ISLR系列:(1)线性回归 Linear Regression
  15. FeathersJS简单使用指南,一个前端也能玩得转的后端框架
  16. fflush()函数:更新缓冲区
  17. springboot自动生成mysql的DAO层代码
  18. ②萨克斯,音符的悠扬(Session管理)
  19. Tkinter(2.x 与3.X的区别)
  20. Git初级

热门文章

  1. ansible软件相关模块丶计划任务,剧本
  2. Design Pattern -&gt;Composite
  3. cocos2d-x滑动翻页,多出一点偏移量。
  4. http缓存基本介绍
  5. oracle自动异地备份数据库
  6. 笨办法学Python(十)
  7. SAP S4CRM和C4C的技术比较
  8. java 使用mongodb
  9. BZOJ 3227: [Sdoi2008]红黑树(tree)
  10. 在Visual Studio 2010里面使用.NET 4.5里面新增加的HttpClient