nyoj 757 (扣分最少)(队列问题)
来源:互联网 发布:网络机房图片 编辑:程序博客网 时间:2024/06/11 13:59
看到题之后,一头雾水,尤其是最后期限有相同的,根本不知道怎么排序,于是在网上找了些大神的思路,才明白过来!
期末考试
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
- 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗?
- 输入
- 输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数。
(以文件结尾) - 输出
- 输出扣除的最小分数。
- 样例输入
33 103 53 131 63 21 371 34 26 14 72 64 53 4
- 样例输出
035
- 解题思路:
- 1.按日期从小到大排序,如果相同按照所扣的分数从小到大排序。
- ***2.最困绕我的就是不知道push函数定义了一个从小到大的顺序,当把分数插入队列时,push默认把最小的放在最前边了,这样就可以用它和即将放进去的比较,把扣分低的拿出来,扣分高的放进去。
3.因为此题涉及两个变量的比较和输入,于是定义一个结构体类型的变量。
4.还要切记用队列时先清空即while(!empty())!!!
- **5.最有技巧性的就是如何判断哪一天可以直接进队列,哪些不可以(需要用到*.size和日期的比较)!
AC码
#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<queue> //队列头文件的应用using namespace std;struct node{int day;int mask;}c[1010];bool cmp(node x,node y)//将x定义为int型变量 {if(x.day>y.day) //先根据日期从小到大排序,日期相同按分数由低到高排序!!{return true;}if(x.day==y.day&&x.mask<y.mask){return true;}return false;}int main(){int i,n,x,s,sum;priority_queue<int,vector<int>,greater<int> >q; //定义一个从小到大的优先队列while(scanf("%d",&n)!=EOF) { while(!q.empty()) q.pop(); //切记要先将队列清空 for(i=0;i<n;i++) scanf("%d%d",&c[i].day,&c[i].mask); sort(c,c+n,cmp); //对其进行排序 sum=0; for(i=0;i<n;i++) { if(q.size()<c[i].day) //q.size()可以理解为当前经历的天数(一开始没放值,所以为零,放进一个值就加1) q.push(c[i].mask); //放进队列(注意: 进去还会根据从小到大变顺序的,扣分少的会一直在前边) else { x=q.top(); if(x<c[i].mask) { q.pop(); //把第一个扣分最少的踢出去
q.push(c[i].mask); //把值放进去
s=s+x;//把踢出去的加到扣得分里
} else s=s+c[i].mask; //把没加进去的也加到扣的分里 }} printf("%d\n",s);}return 0;}
0 0
- nyoj 757 (扣分最少)(队列问题)
- nyoj 55 (摘果耗费体力最少)(队列问题)
- 扣分最少
- 【NYOJ】-最少步数(DFS || BFS&&队列)
- 最少步数(NYOJ 58)
- nyoj 58 最少步数(BFS)
- nyoj-58 最少步数(DFS)
- nyoj--1238--最少换乘(最短路)
- NYOJ 58 最少步数(dfs)
- NYOJ 58 最少步数 (DFS)
- NYoj最少步数(DFS)
- nyoj 最少步数(BFS,DFS)
- nyoj 58 最少步数 (bfs)
- NYOJ—最少步数( 迷宫)
- nyoj 1238 最少换乘(spfa)
- NYOJ 757 期末考试(优先队列)
- D - Doing Homework again扣分最少
- nyoj 42 一笔画问题 (搜索+队列)
- hdu 5316 Magician(2015 Multi-University Training Contest 3)
- spring mongodb Criteria中"and"与"andOperator"方法的区别及"$and"如何工作
- iOS开发实现页面间的数据传递
- NYOJ-水池数目
- Java线程同步:synchronized锁住的是代码还是对象
- nyoj 757 (扣分最少)(队列问题)
- poj 3083 Children of the Candy Corn(广度搜索)
- Android 镜像文件生成流程
- WinCE中C#WinForm利用Web Service查询数据库
- OC10_Block
- 最短路(floyd)
- 机器学习-CrossValidation交叉验证Python实现
- IOS--UI--LessonFMDB
- 用单链表对直接插入排序的简单实现