题目传送门

$naive$想法

最开始的一个贪心策略是每次尽量花掉硬币 ,如果不满足条件,就花纸币。而且不满足条件的时候,要尽量向百取整。(显然是不对的,因为有时候不够)但是显然这个贪心策略是错误的,因为花纸币的那一天可能恰好$Angry cashier$的愤怒值最高。那么我们怎么确认在哪天选择找钱?这是一个问题......


正解

首先我们知道,我们要把每天需要花的钱膜100来处理。我们不停地使用硬币,直到硬币数量变成负数,这告诉我们需要在这之前有一天换出了额外的硬币。

为了保证我们问题的贪心性,我们维护一个优先队列。队列里存的是每天$wi*(100-xi%100)$的值,也就是我们需要找钱的数量。

因为我们是到硬币数量为负数时才尽量去找之前要找钱的时刻,所以我们之前减的时候可以认为是无脑减的,而需要找钱的时候,我们恰好就使硬币数量增加100了。

Code

 #include<cstdio>
#include<algorithm>
#include<queue> using namespace std;
typedef long long ll; int n,m;
ll ans;
int ned[],satis[],ex[];
struct cellur{
int id,w;
};
bool operator < (const cellur &x,const cellur &y)
{
return x.w>y.w;
}
priority_queue<cellur>q; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&ned[i]);
for(int i=;i<=n;i++)
scanf("%d",&satis[i]);
for(int i=;i<=n;i++)
{
int tmp=ned[i];
tmp%=;
if(!tmp) continue;
cellur x;
x.id=i;
x.w=satis[i]*(-tmp);
q.push(x);
m-=tmp;
if(m<)
{
m+=;
cellur u=q.top();q.pop();
ans+=u.w;
ex[u.id]++;
}
}
printf("%lld\n",ans);
for(int i=;i<=n;i++)
{
printf("%d ",ned[i]/+ex[i]);
if(!ex[i]) printf("%d",ned[i]%);
else printf("");
printf("\n");
}
return ;
}

一道比较巧妙的贪心题目,感觉自己贪心这部分还很薄弱,也要补一补了...

CF767E ChangeFree【贪心/优先队列】By cellur925的更多相关文章

  1. hihoCoder 1309:任务分配 贪心 优先队列

    #1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN,  ...

  2. UVA 11134 - Fabled Rooks(贪心+优先队列)

    We would like to place  n  rooks, 1 ≤  n  ≤ 5000, on a  n×n  board subject to the following restrict ...

  3. C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列

    C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  4. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  5. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...

  6. [POJ1456]Supermarket(贪心 + 优先队列 || 并查集)

    传送门 1.贪心 + 优先队列 按照时间排序从前往后 很简单不多说 ——代码 #include <queue> #include <cstdio> #include <i ...

  7. Painting The Fence(贪心+优先队列)

    Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...

  8. CF140C New Year Snowmen(贪心+优先队列)

    CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...

  9. BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 3785  Solved: 1747[Submit][Statu ...

随机推荐

  1. 多线程网页爬虫 python 实现

    采用了多线程和锁机制,实现了广度优先算法的网页爬虫. 对于一个网络爬虫,如果要按广度遍历的方式下载,它就是这样干活的:         1.从给定的入口网址把第一个网页下载下来         2.从 ...

  2. 2014牡丹江 现场赛 F zoj 3824 Fiber-optic Network

    首先赞一下题目, 好题 题意: Marjar University has decided to upgrade the infrastructure of school intranet by us ...

  3. Android Dynamic Action(动态Action)—像访问网页一样地访问Activity

    Android Dynamic Action,简称DA,是一种简便.可变Action的实现方案.DA框架的初衷是为了取代Context.startActivity的调用方式,使用建造者模式(Build ...

  4. java中类加载顺序(深入Java)

    未涉及虚拟机 0.<init>与<clinit>的区别 1.类的加载过程 2.类的使用方式 3.类的加载来源 4.重载之泛型参数不同可以吗 5.参考 引子 记得上次中秋一哥们写 ...

  5. LeetCode——Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  6. 项目Alpha冲刺(团队10/10)

    项目Alpha冲刺(团队10/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 22160041 ...

  7. Android的onMeasure方法

    在Android开发中,当Android原生控件不能满足我们的需求的时候,就需要自定义View.View在屏幕上绘制出来先要经过measure(计算)和layout(布局). 什么时候调用onMeas ...

  8. eclipse无法启动问题记录

    几天没开eclipse,居然报错“can not unload……”,搜索答案发现没有准确的,遵从了一个多人顶赞的办法重下eclipse,把配置文件拷贝一份,结果悲剧了,虽然能够打开了,但我之前配置的 ...

  9. 使用C语言获取字符串或文件的MD5值

    libmd5地址:https://sourceforge.net/projects/libmd5-rfc/ MD5Demo1.c #include <stdio.h> #include & ...

  10. 图像物体检測识别中的LBP特征

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xinzhangyanxiang/article/details/37317863 图像物体检測识别中 ...