####Description

Alice在餐馆里当服务员,今天是她生日,她请求厨师帮她准备生日晚餐,晚餐由N种原料做成,每道菜所需每种原料的数量是一样的。
  厨房里有一些原料,但不够,Alice还需要从旁边的超市中购买一些回来。超市里什么原料都有,每种原料都分大包装和小包装。Alice有M元钱,她想利用这M元钱购买原料使得能做出最多的菜。

####Input

第一行包含两个整数N和M(1<=N<=100,1<=M<=100000),接下来N行,每行包含6个正整数,用来描述这种原料的信息,具体如下:
  (1) X:10<=X<=100,表示一道菜中必须含有这种原料的数量;
  (2) Y:1<=Y<=100,表示这种原料厨房已有的数量;
  (3) Sm:1<=Sm<=100,表示超市里小包装中含有这种原料数量;
  (4) Pm:10<=Pm<=100,表示小包装的价格;
  (5) Sv:1<=Sv<=100,表示超市里大包装中含有这种原料数量;   
(6) Pv:10<=Pv<=100,表示大包装的价格;

####Output

输出最多能做多少道菜。

####Sample Input

输入1:
2 100
10 8 10 10 13 11
12 20 6 10 17 24

输入2:
3 65
10 5 7 10 13 14
10 5 8 11 14 15
10 5 9 12 15 16

####Sample Output

输出1:
5

输出2:
2

####Data Constraint

样例1中,Alice购买第一种原料3个小包装和1个大包装,购买第二种原料1个小包装和2个大包装,一共花费3×10+1×11+1×10+2×24=99元。
  两种原料的数量分别为51个(8+3×10+11)和60个(20+1×6+2×17),可以做出5道菜。

题解:
可以先求完全背包,然后枚举答案,二分答案也是可以的。  
这里介绍完全背包。
我们用f[i,j]表示第i种材料,用j数量的最小价值
我们就直接用完全背包找出来即可。
但是我们又发现一个问题:假如你需要用5个,但是只可以用2块钱买3个,那么是需要买6个用4块的,那么久更新一下。
最后我们枚举答案(也就是从大到小枚举可以做多少道菜),若是你想用二分,也可以。
但是f数组的空间会炸,所以可以使用动态数组。
这是个新的东东,大家可以看看。
  下面是一维的定义方式(pascal),二维的只需要加多括号内容

  vara:array of (array of) longint;beginsetlength(a,s,(s1))//表示第一维下标开0~s-1大小,括号中,第二维表示下标开从0~s1-1大小end.

但是根据题意,我们怎么定义呢??
只需要定义f[n,(m10) div n +100]即可,这是为什么呢?
我们想:若是根据题意来开到100
100000当然会炸。上式即可解决。
我们看看为什么这样搞:
因为最多是10块钱买100个,也就是1块钱买10个,然后买下来的所有东东平均分成n份,那么每份最多就只可以用(m*10) div n,而且一开始厨房内最多有100个原料,那么就+100即可。

Code

uses math;
vari,j,k,l,n,m,ans,small,answer,zd:longint;s:ansistring;bz:boolean;a,b,sm,pm,sv,pv:array[1..100] of longint;f:array of array of int64;
function min(x,y:int64):int64;
beginif x>y then exit(y)else exit(x);
end;
beginreadln(n,m);i:=n+1;j:=(m*10) div n+101;setlength(f,i,j);for i:=0 to n dobeginfor j:=0 to (m*10) div n+100 dobeginf[i,j]:=maxlongint;end;end;for i:=1 to n dobeginreadln(a[i],b[i],sm[i],pm[i],sv[i],pv[i]);zd:=max(a[i],zd);for j:=1 to b[i] dof[i,j]:=0;end;j:=1;for i:=1 to n dobeginfor j:=sm[i] to (m*10) div n+100 dobeginf[i,j]:=min(f[i,j],f[i,j-sm[i]]+pm[i]);end;for j:=sv[i] to (m*10) div n+100 dobeginf[i,j]:=min(f[i,j],f[i,j-sv[i]]+pv[i]);end;end;for i:=1 to n dobeginfor j:=(m*10) div n+100-1 downto 0 dobeginf[i,j]:=min(f[i,j],f[i,j+1]);end;end;for i:=((m*10) div n+100) div zd downto 1 dobeginif i=46685 thenans:=0;ans:=0;bz:=true;for j:=1 to n dobeginif ans+f[j,i*a[j]]<=m thenbeginans:=ans+f[j,i*a[j]];endelsebeginbz:=false;break;end;end;if bz thenbeginwriteln(i);halt;end;end;writeln(0);
end.

转载于:https://www.cnblogs.com/RainbowCrown/p/11148426.html

2017.08.15【NOIP提高组】模拟赛B组 生日聚餐相关推荐

  1. 【jzoj】2018.1.30NOIP普及组——模拟赛D组

    @_@ 前言 写博客时间 2018/1/30 22:36. 感想:出数据的dalao我服! 正题 题目1:二项式展开式(jzoj2254) 输入一个整数,求展开(a+b)^n.展开方式为 (a+b)^ ...

  2. DD 摆磁铁(计蒜客信息学8月普及组模拟赛)

    DD 摆磁铁 这道题来自 计蒜客信息学8月普及组模拟赛 普及组!! 把我一个TG选手看懵了 看来我要回去打普及了 题目大意 给出一个n个节点的树,要把树上给定的2*m个节点两两配对,两个节点配对的产生 ...

  3. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  4. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  5. 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结

    2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...

  6. JZOJ(中山纪念中学) 2018.02.02【NOIP普及组】模拟赛D组

    本次题目:2018.02.02[NOIP普及组]模拟赛D组 第一题 题目:第一题 公牛数字 题意: 求题目给出两个数字的乘积 分析: 这题明显只是考察学生的高精可我居然没做对,只要多练习几次,即可AC ...

  7. 纪中集训2020.01.13【NOIP普及组】模拟赛C组总结————My First Time Write Summary

    纪中集训2020.01.13[NOIP普及组]模拟赛C组总结 题目编号 标题 0 [NOIP普及组模拟]取值( numbers.pas/cpp) 1 [NOIP普及组模拟]数对(pairs.pas/c ...

  8. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

  9. 2021.08.09【普及组】模拟赛C组比赛总结

    文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...

  10. 纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析

    纪中集训2020.01.16[NOIP普及组]模拟赛C组总结+[0.Matrix]分析 题目: 0.matrix 1.product 2.binary 3.value 巨佬估分:100+100+40+ ...

最新文章

  1. linux关机重启注销命令,Linux的注销、关机、重启基本命令介绍
  2. 61条面向对象设计的经验原则
  3. 设计模式 -- (14)中介者模式
  4. S2SH 第一次整合的经历
  5. Windows函数:PtrToUlong作用
  6. Java Exceptions
  7. ajax分页效果、分类联动、搜索功能
  8. PCL:RANSAC 空间直线拟合
  9. Nginx面试题整理
  10. adminlte java_AdminLTE Button小结
  11. 仓位管理之二: 凯利公式指导投资与多种资金管理方式
  12. Linux程式设计入门 - fork, pthread, and signals
  13. Python爬虫:输入公司名称,爬取企查查网站中的公司信息
  14. 员工认可和奖励的力量
  15. Antd的Upload组件上传文件控制文件数量、格式等,以及提交时如何获取文件
  16. 前程无忧:2021节后招聘高峰是否回来
  17. 关于java内存管理和OSR的一个小实验
  18. 专访普林斯顿大学贡三元教授:做 AI 研究要有价值观,数学更是「制胜法宝」
  19. vw vh vm
  20. chrome打开本地html自动刷新,谷歌浏览器插件Auto Refresh 网页自动刷新

热门文章

  1. Odoo10参考系列--QWeb报表
  2. python程序开发_用python进行桌面程序开发
  3. 快速打开计算机磁盘的软件,怎样快速启动电脑
  4. 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言
  5. Mybatis foreach 性能问题
  6. 基于android的高仿抖音,Android仿抖音列表效果
  7. 一级计算机框线设置为窄线,计算机等级一级MS Office考题:第二套字处理题
  8. java环境卡顿_解决Emacs在windows使用的问题,比如环境设置、卡顿……
  9. linux在生活中的应用例子,LINUX操作系统在教师学生日常生活中的应用(全).docx
  10. e2 android,魅蓝E2做工怎么样?魅蓝手机E2拆机全过程图解