Description

  外卖店一共有N种食物,分别有1到N编号。第i种食物有固定的价钱Pi和保质期Si。第i种食物会在Si天后过期。JYY是不会吃过期食物的。比如JYY如果今天点了一份保质期为1天的食物,那么JYY必须在今天或者明天把这个食物吃掉,否则这个食物就再也不能吃了。保质期可以为0天,这样这份食物就必须在购买当天吃掉。JYY现在有M块钱,每一次叫外卖需要额外付给送外卖小哥外送费F元。送外卖的小哥身强力壮,可以瞬间给JYY带来任意多份食物。JYY想知道,在满足每天都能吃到至少一顿没过期的外卖的情况下,他可以最多宅多少天呢?
 

Input

  第一行包含三个整数M,F和N。
  接下来N行,第i行包含两个整数Pi和Si。

Output

  输出仅包含一行一个整数表示JYY可以宅的最多的天数。

Sample Input

32 5 2
5 0
10 2

Sample Output

3

HINT

【样例说明】

JYY的最佳策略是:第一天买一份食物1和一份食物2并且吃一份食物1;第二天吃一份食物2;第三天买一份食物1并且吃掉。
 
【数据规模与约定】
对于100%的数据满足0<=Si<=10^18,1<=F,Pi,M<=10^18,1<=N<=200。
题解:我不能确保这种方法的正确性,因为迄今为止我还没有看到其他能够复杂度能够承受的办法,最起码这样做的话,数据是可以过的,当然不排除数据不够全面。因为送物品非常自由,没有任何限制,所以我们要找一个合适的自变量进行枚举。可以发现,如果我们外卖的次数过少,那么就会出现一些食品性价比不高的情况;如果次数过多,那么就会浪费外卖运费。故可以从这里入手,因为可以看出这是一个类似于二次函数的函数。我们可以通过三分来查找峰值。
  那么对于每次的求值,就是以贪心为主体了。因为我们显然要价格便宜,保质期又长的食品,故我们将同保质期但价格偏高的去除,然后根据保质期从大到小排序,我们给每一次送餐都加上一个该食品,直到钱不够或者时间已经超过。
代码:
--------------------------------------------------------------------------------------------------

#include <cstdio>
#include <algorithm>
#define MAXN 205
using namespace std;

typedef long long ll;

struct Food { ll p, s; } tmp[MAXN], a[MAXN];

struct Cmp1
{
  bool operator () (Food x, Food y)
  {
    return x.s == y.s ? x.p < y.p : x.s < y.s;
  }
};
Cmp1 cmp1;

struct Cmp2
{
  bool operator () (Food x, Food y)
  {
    return x.p < y.p;
  }
};
Cmp2 cmp2;

ll t, m, f, n, tot;

ll getAns(ll o)
{
  ll nowm = m - f * o, d = 0, res = 0, tx;
  if (nowm < 0) return 0;
  for (int i = 1; i <= tot; i++)
  {
    ll s = a[i].s, p = a[i].p;
    if (d <= s) tx = min(s - d + 1, nowm / (p * o)), res += tx * o, nowm -= p * o * tx, d += tx;
    if (d <= s) tx = min(o, nowm / p), res += tx, nowm -= p * tx, d++;
  }
  return res;
}

void init()
{
  tot = 1;
  scanf("%I64d %I64d %I64d", &m, &f, &n);
  for (int i = 1; i <= n; i++) scanf("%I64d %I64d", &tmp[i].p, &tmp[i].s);
  sort(tmp + 1, tmp + n + 1, cmp1), a[1] = tmp[1];
  for (int i = 1; i <= n; i++) if (tmp[i].s > a[tot].s) a[++tot] = tmp[i];
  sort(a + 1, a + tot + 1, cmp2);
}

int main()
{
  freopen("food.in", "r", stdin);
  freopen("food.out", "w", stdout);
  scanf("%I64d", &t);
  while (t--)
  {
    init();
    if (f + a[1].p > m) { printf("0\n"); continue; }
    ll l = 1, r = m / (f + a[1].p), ans = max(getAns(l), getAns(r));
    while (l <= r)
    {
      ll tot = r - l + 1, ml = l + tot / 3, ansl = getAns(ml), mr = l + tot * 2 / 3, ansr = getAns(mr);
      if (ansl < ansr) ans = max(ansl, ans), l = ml + 1;
      else ans = max(ansr, ans), r = mr - 1;
    }
    for (int i = l; i <= r; i++) ans = max(ans, getAns(i));
    printf("%I64d\n",ans);
  }
  return 0;
}

--------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/jinkun113/p/4873174.html

[BZOJ3874/AHOI2014]宅男计划相关推荐

  1. 外卖(food) 洛谷4040宅男计划 三分套二分贪心

    food评测传送门 [题目描述] 叫外卖是一个技术活,宅男宅女们一直面对着一个很大的矛盾,如何以有限的金钱在宿舍宅得尽量久.     外卖店一共有 N 种食物,每种食物有固定的价钱 Pi 与保质期 S ...

  2. 五道口宅男 - Android

    http://hujiaweibujidao.github.io/mobile/ 对移动开发的热情一直都有,但是直到本科大四保研之后才有了时间去自学Android开发,从此一发不可收拾,做了些小项目, ...

  3. 五道口宅男 - Android NDK and OpenCV Development With Android Studio

    http://hujiaweibujidao.github.io/ http://hujiaweibujidao.github.io/blog/archives/ 五道口宅男 http://hujia ...

  4. 荐几个宅男宅女常去的网站 你不得不知道的

    .宅男宅女们每天呆在电脑前,除了聊聊QQ,上上开心,逛逛淘宝,还做些什么呢?以下15个网站,都是宅男宅女经常去的地方,你也可以去看看. 1. 去那儿 http://www.qunar.com 想去旅游 ...

  5. 宅男抖音某猫协议分析及应用破解

    " 分析传说中的快x,顺便提供破VIP线路及去启动广告方法." 在当今这个由应用市场主导的网络上,流传着一批应用,它们低调又神秘,依赖口碑与独立网站在地下渠道传播,应用市场中从来都 ...

  6. 头像秒变像素风,宅男大叔自学AI打造大师级水准,火爆推特

    ↑ 点击蓝字 关注极市平台 来源丨量子位 极市导读 最近,一位日本宅男大叔佐藤做了一个AI生成肖像画的网站AI Gahaku,10天内用户访问量从0暴增到100万,引爆推特.>>就在明天, ...

  7. 宅男程序员给老婆的计算机课程之9:数据模型

    这次来讲MVC中最后的M. Model,几乎可以说是网页应用的核心. 之前课程提到过网页应用是由数据库驱动,而在很多场景,数据库 = M : M = 数据库. 所谓的ORM: object relat ...

  8. 宅男程序员给老婆的计算机课程

    声明: Technorati 标记: IT生活 本文档来自:http://developer.51cto.com/art/201203/321936.htm 宅男程序员给老婆的计算机课程之0:认清本质 ...

  9. ed是什么梗_花泽香菜不笑了什么梗怎么回事?花泽香菜为什么是宅男女神?

    花泽香菜,是日本的声优,她不仅长相萌,声音才是真的萌.因为参与配音了很多日漫,在加上是童星出身,在日本拥有很高的人气(花泽香菜为什么那么火),被称为"宅男女神".据悉,花泽香菜平时 ...

最新文章

  1. java客服系统_阿里Java内部资料:2020最全Java技术栈(架构篇+算法篇+大数据)
  2. 自然语言处理的发展历程
  3. 互联网生态建设落地五大挑战——保险科技生态建设...
  4. 测试人员在需求阶段应做哪些工作
  5. Linux 内核101:[译]并发导论
  6. VTK:重叠AMR用法实战
  7. 通俗易懂两种常用的多线程实现方式——Java并发系列学习笔记
  8. 详解三种主流分布式事务方案的优劣
  9. java classpath设置_Java CLASSPATH设置
  10. 系统起动时加载的过程
  11. IOS 设置文件是否使用ARC
  12. LeetCode篇之链表:83(去重问题)
  13. python爬虫练习--爬取猫眼top100电影信息
  14. ubuntu ifconfig_VirtualBox中ubuntu的LAMP项目(温度采集)
  15. [CTF]学习资源推荐
  16. j-link V7.22b 提示“The connected J-Link is defective“
  17. A40i使用笔记:QT使用alsa采集音频pcm信息
  18. excel使用vb选中指定单元格,到指定行的最后一行有数据的等行数的单元格区间(列等高复制)
  19. 【天天读书】2023 年,科技行业的创业者们推荐这 47 本书 | 创始人书单
  20. 功能覆盖率实验第二讲:coverage中at_leat用法

热门文章

  1. R语言forestmodel包使用教程
  2. android nuwa2,android热更新
  3. scrapy-redis mysql_Scrapy-redis 分布式
  4. Matlab | 数字信号处理:双线性变换法设计IIR数字滤波器
  5. python初中必背语法_初中必背英语语法知识汇总
  6. 导入图片后截取_微服务项目第36天:导入数据到索引库
  7. 直播报名 | 科技赋能零售金融业务转型
  8. rust(67)-rust元组与空元组
  9. 基因分子生物学(1)-基因常识与DNA常识
  10. wxWidgets随笔(9)-utf8~wxString存储二进制数据(4)