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 ...
随机推荐
- Python性能分析工具
import cProfile import pstats from flask import Flask,jsonify, request @app.route("/test", ...
- office2016专业增强版激活密匙 (shell激活版)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_42642945/article/d ...
- 怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
这么说吧,在我眼里,Java 就是最流行的编程语言,没有之一(PHP 往一边站).不仅岗位多,容易找到工作,关键是薪资水平也到位,不学 Java 亏得慌,对吧? 那可能零基础学编程的小伙伴就会头疼了, ...
- HttpClient 常用方法封装
简介 在平时写代码中,经常需要对接口进行访问,对于 http 协议 rest 风格的接口请求,大多使用 HttpClient 工具进行编写,想着方便就寻思着把一些常用的方法进行封装,便于平时快速的使用 ...
- shutil模块的使用
shutil模块 高级的文件,文件夹,压缩包处理模块 shutil.copyfileobj(fsrc,fdst,length) 将文件内容拷贝到另外一个文件中,可以部分.fdst目标length长度( ...
- python中turtle模块画正多边形
画正多边形主要是计算多边形每个角度对应的外角的度数,计算出来这个度数即可画图,相对来说非常简单 以正六边形为例 import turtle import time t = turtle.Pen() f ...
- centos7 hive 单机模式安装配置
前言:由于只是在自己的虚拟机上进行学习,所以对hive只是进行最简单的配置,其他复杂的配置文件没有配置. 1.前提 1.1 安装配置jdk1.8 1.2 安装hadoop2.x hadoop单机模式安 ...
- 关于MYSQL的查询时间段、删除数据、查询目标行的命令用法。
Q1.第一次工作写命令时,写了一个把一个表的数据插入到另一个表中,运行时命令长时间处于执行状态. A.第一次处理数据库大量数据,长时间按运行属于正常现象,这与学校中的小数据不同. Q2.如何查询数据库 ...
- LR字符串处理函数-lr_save_datetime
void lr_save_datetime(const char *format, int offset, const char *name); 中文解释: lr_save_datetime将当前日期 ...
- matplotlib.pyplot.plot详解
参考资料: https://blog.csdn.net/baidu_41902768/article/details/80686608 之前的随笔也有说过,matplotlib是python中一个非常 ...