POJ3040贪心
题意:作为创纪录的牛奶生产的奖励,农场主约翰决定开始给Bessie奶牛一个小的每周津贴。FJ有一套硬币N种(1≤N≤20)不同的面额,每枚硬币是所有比他小的硬币面值的倍数,例如1美分硬币、5美分硬币、10美分硬币和50美分硬币。使用这些硬币,FJ每周至少给Bessie C(1 <= C <=100000000)美分。请你计算他最多能给Bessie几周。
题解:
①因为数据量较大,所以不能采用单组模拟的方式,不然必会tle,因此设立了一个used[i]数组来存储一种贪心情况,各种硬币所需要的个数,以便将这种情况的总数一次性加在总周数上。
②贪心策略采用在满足先用大额面值,再用小额面值的前提下,先尽可能接近而不超过规定的津贴值;然后用从小额面值到大额面值,超过但尽可能少超过规定的津贴值进行贪心。
注意:
①面值大于津贴的情况,直接在输入处预处理即可。
②在考虑used数组时,不要大于本身的数量
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const ll inf = 0x3f3f3f3f3f3f3f3f;
struct coin {
ll value;
ll num;
}p[];
bool cmp(coin a, coin b)
{
return a.value > b.value;
}
int main(void)
{
ios::sync_with_stdio(false);
int N, C;cin >> N >> C;
ll v, n, tot = ;
ll week = ;
for (ll i = ; i <= N; i++)
{
cin >> v >> n;
if (v >= C)
week += n;
else
{
p[tot].value = v;
p[tot].num = n;
tot++;
}
}
sort(p + , p + + tot, cmp);
ll used[];//存储一次贪心后的结果
while ()
{
memset(used, , sizeof(used));
ll tmp = C;
ll sum = ;
for (ll i = ; i <= tot; i++)//贪心策略1,面额从大到小,尽可能接近C,但不超过
{
if (p[i].num == )continue;
sum += p[i].num * p[i].value;
used[i] = min(tmp / p[i].value, p[i].num);
tmp -= used[i] * p[i].value;
}
if (sum < C)break;
if (tmp != )//贪心策略2,面额从小到大,尽可能少超过C
{
for (ll i = tot; i >= ; i--)
{
if (p[i].num == )continue;
if (used[i] == p[i].num)continue;
while (used[i] < p[i].num)
{
used[i]++;
tmp -= p[i].value;
if (tmp <= )
break;
}
if (tmp <= )
break;
}
}
ll Min_num = inf;//Min_num表示能执行的这一组used的总数
for (ll i = ; i <= tot; i++)
{
if (used[i] == )continue;
Min_num = min(Min_num, p[i].num/used[i]);
}
week += Min_num;
for (int i = ; i <= tot; i++)
p[i].num -= Min_num * used[i];
}
cout << week << endl;
return ;
}
POJ3040贪心的更多相关文章
- poj-3040 Allowance (贪心)
http://poj.org/problem?id=3040 FJ 有n种不同面值的硬币,每种硬币都有相应的个数,大面值的硬币值总能被小面值的硬币值整除,每周需要支付 Bessie c元,问最多能 ...
- 【贪心算法】POJ-3040 局部最优到全局最优
一.题目 Description As a reward for record milk production, Farmer John has decided to start paying Bes ...
- poj3040(双向贪心)
Allowance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1540 Accepted: 637 Descript ...
- poj3040 发工资(贪心)
题目传送门 题目大意:给一个人发工资,给出不同数量不同面额,(大面额一定是小面额的倍数),问最多能发几天,(每天实发工资>=应发工资). 思路:首先,将大于等于c的面额的钱直接每个星期给奶牛一张 ...
- 《挑战程序设计竞赛》2.2 贪心法-其它 POJ3617 3069 3253 2393 1017 3040 1862 3262
POJ3617 Best Cow Line 题意 给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下列任意操作: 从S的头部(或尾部)删除一个字符,加到T的尾部 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
随机推荐
- Go语言json编码驼峰转下划线、下划线转驼峰
目录 一.需求 二.实现 三.使用 JsonSnakeCase统一转下划线json JsonSnakeCase统一转驼峰json 一.需求 golang默认的结构体json转码出来,都是大写驼峰的,并 ...
- Python3.7解释器+sublime Text3编辑器+案例打包软件+Python语言程序设计基础教材
编辑器:https://nsyw.lanzous.com/i7lcdyh Python3.7 https://nsyw.lanzous.com/i7a299c 案例 https://nsyw.lanz ...
- QingStor 对象存储架构设计及最佳实践
对象存储概念及特性 在介绍 QingStor️对象存储内部的的架构和设计原理之前,我们首先来了解一下对象存储的概念,也就是从外部视角看,对象存储有什么特性,我们应该如何使用. 对象存储本质上是一款存储 ...
- Vue —— VueX精讲(1)
大纲 这一讲我们最主要的就是学习vue中的数据管理VueX,这个是一个大杀器 一.回顾一些Promise相关的东西 Promise 有几个比较重要的方法,最重要的还是有一个叫做all的方法,这个也是非 ...
- .Net Core微服务入门全纪录(一)——项目搭建
前言 写这篇博客主要目的是记录一下自己的学习过程,只能是简单入门级别的,因为水平有限就写到哪算哪吧,写的不对之处欢迎指正. 什么是微服务? 关于微服务的概念解释网上有很多... 个人理解,微服务是一种 ...
- 前端Javascript效果汇总
1.DOM原生动态加载js <script type="text/javascript"> function loadJs(){ //得到html的头部dom var ...
- AutoIt实现文件上传
AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动 ...
- MySQL——事务(Transaction)详解
原文:https://blog.csdn.net/w_linux/article/details/79666086
- 拒绝降权!教你用 Python 确保制作的短视频独一无二
1. 场景 前段时间有人私信我,说自己辛辛苦苦剪辑的短视频,上传到某平台后,由于播放量太大,收到 降权 的通知,直接导致这个账号废掉了! 其实,各大视频平台都有自己的一套鉴别算法,针对视频的二次创作, ...
- ASP.NET WebAPI框架解析第一篇
ASP.NET WebAPI有两种寄宿模式,一种是WebHost,一种是SelfHost,为什么可以有两种模式的原因在于WebAPI有一个相对独立的消息处理管道,只要给这个消息管道传递一个封装好的对象 ...