description

外卖店一共有N种食物,分别有1到N编号。第i种食物有固定的价钱Pi和保质期Si。第i种食物会在Si天后过期。JYY是不会吃过期食物的。

比如JYY如果今天点了一份保质期为1天的食物,那么JYY必须在今天或

者明天把这个食物吃掉,否则这个食物就再也不能吃了。保质期可以为0天,这

样这份食物就必须在购买当天吃掉。

JYY现在有M块钱,每一次叫外卖需要额外付给送外卖小哥外送费F元。

送外卖的小哥身强力壮,可以瞬间给JYY带来任意多份食物。JYY想知道,在

满足每天都能吃到至少一顿没过期的外卖的情况下,他可以最多宅多少天呢?


analysis

  • 首先除掉垃圾食品,即价钱比其他的高、保质期还短的,肯定不买;剩下来的价钱和保质期都单调递增,价钱越高保质期一定越长

  • 考虑送外卖的人来的次数对答案的影响,容易知道次数太多或太少都不优,外卖费或食物贵,而实际上答案与次数成单峰函数的关系

  • 三分送外卖的人来的次数\(x\),再判定来\(x\)次的最长续命;每一次送餐,都贪心地平均分配钱,然后只考虑一次送餐的答案再乘\(x\)

  • 对于只一开始买食物中途吃,其实都是买保质期最短的食物若干份,保质期不够的,再买保质期第二短的若干份,如此下去

  • 这个当然\(O(n)\)很好做;剩下还有一点钱,则贪心考虑拼到其中一次买餐的后面多续几天;总的来说两个贪心一个三分


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 205
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i) using namespace std; ll n,fee,tot,money;
bool bz[MAXN]; struct node
{
ll x,y,id;
}a[MAXN],b[MAXN]; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline bool cmp(node a,node b){return a.x<b.x;}
inline ll check(ll x)
{
ll rest=money-x*fee,ave=rest/x,left=rest-ave*x,rec,day=0,ans=0;
fo(i,1,n)
{
if (a[i].y>=day && a[i].x<=ave)
{
ll tmp=min(a[i].y-day+1,ave/a[i].x);
ave-=a[i].x*tmp,day+=tmp;
}
rec=i;
if (a[i].x>ave)break;
}
left+=ave*x;
fo(i,rec,n)
{
if (a[i].y>=day && a[i].x<=left)
{
ll tmp=left/a[i].x;
left-=tmp*a[i].x,ans+=tmp;
}
if (ans)break;
}
return day*x+ans;
}
int main()
{
freopen("food.in","r",stdin);
freopen("food.out","w",stdout); money=read(),fee=read(),n=read();
fo(i,1,n)a[i].x=read(),a[i].y=read(),a[i].id=i;
memset(bz,1,sizeof(bz));
fo(i,1,n)fo(j,1,n)if (i!=j && a[j].x<=a[i].x && a[j].y>=a[i].y){bz[i]=0;break;} fo(i,1,n)if (bz[i])b[++tot]=a[i];n=tot;
sort(b+1,b+n+1,cmp);fo(i,1,n)a[i]=b[i]; ll l=1,r=fee?money/fee:money+1,midl,midr;
while (l<r)midl=l+(r-l)/3,midr=r-(r-l)/3,check(midl)>=check(midr)?r=midr-1:l=midl+1;
printf("%lld\n",check(l));
return 0;
}

【JZOJ3673】【luoguP4040】【BZOJ3874】宅男计划的更多相关文章

  1. 【BZOJ3874】[AHOI&JSOI2014]宅男计划(贪心,三分)

    [BZOJ3874][AHOI&JSOI2014]宅男计划(贪心,三分) 题面 BZOJ 洛谷 题解 大力猜想一最长的天数和购买外卖的总次数是单峰的.感性理解一下就是买\(0\)次是\(0\) ...

  2. bzoj3874&2832 [Ahoi2014]宅男计划 模拟退火,三分

    [Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 962  Solved: 371[Submit][ ...

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

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

  4. [luogu] P4040 [AHOI2014/JSOI2014]宅男计划(贪心)

    P4040 [AHOI2014/JSOI2014]宅男计划 题目背景 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY不得不依靠叫外卖来维持生计. 题目描述 外卖店一共有N种食物, ...

  5. Bzoj 3874: [Ahoi2014&Jsoi2014]宅男计划 三分+贪心

    3874: [Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 861  Solved: 336[Su ...

  6. 「AHOI2014/JSOI2014」宅男计划

    「AHOI2014/JSOI2014」宅男计划 传送门 我们首先要发现一个性质:存货天数随买食物的次数的变化类似于单峰函数. 具体证明不会啊,好像是二分加三分来证明?但是没有找到明确的严格证明. 感性 ...

  7. BZOJ3874:[AHOI2014&JSOI2014]宅男计划(爬山法)

    Description  [故事背景] 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY 不得不依靠叫外卖来维持生计. [问题描述] 外卖店一共有N种食物,分别有1到N编号.第i种 ...

  8. bzoj 3874: [Ahoi2014]宅男计划

    Description  [故事背景] 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY 不得不依靠叫外卖来维持生计. [问题描述] 外卖店一共有N种食物,分别有1到N编号.第i种 ...

  9. Bzoj2832 / Bzoj3874 宅男小C

    Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 124  Solved: 26 Description 众所周知,小C是个宅男,所以他的每天的食物要靠外 ...

  10. [洛谷P4040] AHOI2014 宅男计划

    题目背景 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY不得不依靠叫外卖来维持生计. 问题描述 外卖店一共有N种食物,分别有1到N编号.第i种食物有固定的价钱Pi和保质期Si.第 ...

随机推荐

  1. vue-cli脚手架工具新老版本安装对比

    1.老版本 Shift+鼠标右键 选择打开命令窗口 1.创建项目之前,需先确保本机已经安装node 在命令窗口中执行node -v npm -v   2.一般情况下用npm安装东西比较慢,可以使用淘宝 ...

  2. python plotly 使用教程

    1.plotly介绍 lotly的Python图形库使互动的出版质量图表成为在线. 如何制作线图,散点图,面积图,条形图,误差线,箱形图,直方图,热图,子图,多轴,极坐标图和气泡图的示例. 推荐最好使 ...

  3. Delphi ini文件结构简介

    一.INI文件的结构:; 注释[小节名]关键字=值 INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. 值的类型有三种:字符串.整型数值和布尔值.其中字符串存贮在INI ...

  4. (转)Spring Boot干货系列:(七)默认日志logback配置解析

    转:http://tengj.top/2017/04/05/springboot7/ 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的, ...

  5. 小程序 页面传值 json 被截断

    因此解决这个报错的方法是将要传输的数据用 encodeURIComponent()函数(可把字符串作为 URI 组件进行编码) 先进行编码, 传输过去后再通过decodeURIComponent()函 ...

  6. Stream流式编程

    Stream流式编程   Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个 ...

  7. 线程类中使用spring注解报空指针异常

    springboot项目开发中,作为服务端,实现了线程类,在此类中添加spring注解@Source注入的service,报空指针异常. 查原因后,发现是线程中,不支持spring注解,因为sprin ...

  8. 87、使用TensorBoard进行可视化学习

    1.还是以手写识别为类,至于为什么一直用手写识别这个例子,原因很简单,因为书上只给出了这个类子呀,哈哈哈,好神奇 下面是可视化学习的标准函数 ''' Created on 2017年5月23日 @au ...

  9. 用Processing生成屏保(二)

    代码 1: class TPoint 2: { 3: public TPoint(int _x, int _y) { 4: super(); 5: this._x = _x; 6: this._y = ...

  10. apache2.2.25+tomcat7.0.47集群方案

    因为公司项目在线人数的增加,随着现在硬件成本越来越低,大多数的生产环境内存大多都已经达到 16G,尤其最新的阿里云,客户的机器都是配置超高的java主机,但是Java的运行环境,内存使用有限 ,这样就 ...