【贪心+堆优化】奶牛晒衣服 dry.pas/c/cpp
来源:互联网 发布:mac ps转化为智能对象 编辑:程序博客网 时间:2024/04/27 16:54
奶牛晒衣服 (dry)
Problem: dry.pas/c/cpp
Input: dry.in
Output: dry.out
Memory Limit: 128 MB
Time Limit: 1 sec
【问题描述】
在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。
圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用1的时间可以晒干A点湿度。抠门的熊大妈买了1台烘衣机。使用烘衣机可以让你用1的时间使1件衣服除开自然晒干的A点湿度外,还可烘干B点湿度,但在1的时间内只能对1件衣服使用。
N件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0为干)。
【输入】
第一行N,A,B;接下来N行,每行一个数,表示衣服的湿度(1≤湿度,A,B≤500000,1≤N≤500000)。
【输出】
一行,最少时间。
【样例】
dry.in
3 2 1
1 2 3
dry.out
1
【样例解析】
第1个时间内,用机器处理第3件衣服,此外,所有衣服自然晒干2。花费1时间全部弄干。
首先看这道题的意思,我们可以很容易的得出每次选湿度最大的衣服去烘干更优,那么我们就可以用贪心的方法来做
我一开始是维护了两个优先队列(也就是堆,Pascal可以手动维护)q1和q2,比如样例我们都插入q1中,那么q1就为3 2 1,然后依次取出,第一个 -a-b ,其他的 -a,插入q2,这时q2就为0 0 -1,这是就满足题目要求,就把次数输出。(至于满足题目要求的判断可以用一个计数器,每次遇到一个新的<=0的就+1)
不过就这样交了上去,结果只过了4组。。。。。
后来分析,这种其实已经接近O(N2)了,所以还需要优化!
我们发现,每次 -a-b 的就只有第一个最大的数,而其他的都减了一个 a 。所以换句话说就是所有都减 a ,而第一个多减一个 b 。那么与其每个去减 a ,那还不如我们用一个变量sum每次 +a ,这样每次就只需要让堆的跟(也就是最大的那个) -b 就ok了,最后只需要比较最大的那个是否 <=sum ,如果成立,就表示全部都<=sum 了。这就大大提高了效率!
C++ Code
/*C++ Codehttp://blog.csdn.net/jiangzh7By jiangzh*/#include<cstdio>#include<queue>using namespace std;#define MAXN 500010int n,a,b,wet[MAXN];priority_queue<int> q;int num=0,ans=0;void init(){ freopen("dry.in","r",stdin); freopen("dry.out","w",stdout); scanf("%d%d%d",&n,&a,&b); for(int i=1;i<=n;i++) {scanf("%d",&wet[i]);q.push(wet[i]);}}void work(){ int sum=0; while(1) { if(sum>=q.top()) {printf("%d",ans);return;} sum+=a; int x=q.top();q.pop(); x-=b; q.push(x); ans++; }}int main(){ init(); work(); return 0;}
- 【贪心+堆优化】奶牛晒衣服 dry.pas/c/cpp
- 奶牛晒衣服_纪中1744_贪心+堆
- 【贪心+堆优化】任务时间表(task.cpp/pas)
- 【枚举+优化】【队列操作】【RMQ】奶牛派对 tahort.pas/c/cpp
- 【贪心】营养膳食 diet.pas/c/cpp
- 【链表操作】奶牛的比赛 contest.pas/c/cpp
- 16.7.16 C 1744. 奶牛晒衣服
- [luogu1843] 奶牛晒衣服
- 奶牛晒衣服
- 2、种树(trees.pas/c/cpp)贪心
- mm.cpp/c/pas
- set.cpp/c/pas
- 奶牛专题2:奶牛晒衣服
- 奶牛晒衣服 (Standard IO)
- 奶牛晒衣服 (Standard IO)
- 7.16奶牛晒衣服题解
- CCF NOI1134 奶牛晒衣服
- 洛谷 P1843 奶牛晒衣服
- 【最小环】心灵的抚慰 heart.pas/c/cpp
- 【动态规划】书本整理 book.pas/c/cpp
- [总结] 阶段性总结 10.18~11.09集训生活
- [NOIP注意]NOIP前必须记住的30句话
- [NOIP]自己收集总结的NOIP考纲
- 【贪心+堆优化】奶牛晒衣服 dry.pas/c/cpp
- 【枚举+优化】【队列操作】【RMQ】奶牛派对 tahort.pas/c/cpp
- 【对中点】圆圈舞蹈 circle.pas/c/cpp
- 【模拟】【栈】外星密码 password.pas/c/cpp
- 【最短路】逃离遗迹 escape.pas/c/cpp
- XML编程(CRUD)
- 遍历课上例题shuiguo.xml文件中根节点的所有节点,打印节点名称和节点值
- 完成对节点属性的添加、删除的操作
- UML ---构件图