时间限制:5000ms
单点时限:1000ms
内存限制:256MB

描述

杂货店出售一种由N(3<=N<=12)种不同颜色的颜料,每种一瓶(50ML),组成的颜料套装。

你现在需要使用这N种颜料;不但如此,你还需要一定数量的灰色颜料。

杂货店从来不出售灰色颜料——也就是它不属于这N种之一。幸运的是,灰色颜料是比较好配置的,如果你取出三种不同颜色的颜料各x ml,混合起来就可以得到xml的灰色颜料(注意不是3x)。

现在,你知道每种颜料各需要多少ml。你决定买尽可能少的“颜料套装”,来满足你需要的这N+1种颜料。

那么你最少需要买多少个套装呢?

输入

输入包含若干组测试数据。每组数据一行:第一个数N, 3<=N<=12, 含义如上;

接下来N+1个数,分别表示你需要的N+1种颜料的毫升数。最后一种是灰色。所有输入的毫升数<=1000.

当某一行为0时代表输入终止

注意:输入中不存在每个颜料套装的毫升数。由题意可知,每种各50ml,即一共50N ml

输出

每组数据输出一行,最少需要的套装数。

样例输入
  1. 3 40 95 21 0
  2. 7 25 60 400 250 0 60 0 500
  3. 4 90 95 75 95 10
  4. 5 0 0 0 0 0 333
  5. 0
样例输出
  1. 2
  2. 8
  3. 2
  4. 4
    这题的难点在于已知各种颜料剩余量,求能够合成的灰色颜料的重量,想了好久,终于得出如下结论
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3. const int INF = 0x3f3f3f3f;
  4. int arr[];
  5. int n, gray, ans, rest;
  6. bool cmp(int n, int m) {
  7. return n > m;
  8. }
  9. int getGray(int m) {
  10. int ans = INF;
  11. // 第一种情况是所以多余出来的颜料的总量除3
  12. // 按n = 4举例 3 4 5 6 能合除 6ml 的灰色颜料
  13. ans = min(ans, (rest + m * n * ) / );
  14. // 第二种情况是剩余量最多的那种颜料合完灰色还有多余
  15. // 按n = 4举例 3 4 5 100 能合除 6ml 的灰色颜料
  16. ans = min(ans, (rest - arr[] + m * (n - ) * ) / );
  17. // 第三种情况是剩余量最多的两种颜料合完灰色还有多余
  18. // 按n = 4举例 3 4 100 100 能合出 7ml 的灰色颜料
  19. ans = min(ans, rest - arr[] - arr[] + m * (n - ) * );
  20. return ans;
  21. }
  22. int main() {
  23. while (scanf("%d", &n) && n) {
  24. int mx = ;
  25. for (int i = ; i < n; i++) {
  26. scanf("%d", &arr[i]);
  27. // 找到需求最多的颜料的重量
  28. mx = max(mx, arr[i]);
  29. }
  30. scanf("%d", &gray);
  31. // 不考虑灰色要买的套装数量
  32. ans = mx % ? mx / + : mx / ;
  33. rest = ;
  34. for (int i = ; i < n; i++) {
  35. // 记录第i种颜料多余出来的重量
  36. arr[i] = ans * - arr[i];
  37. // 记录多余出来的颜料的总重量
  38. rest += arr[i];
  39. }
  40. // 按多余出来的重量降序排序
  41. sort(arr, arr + n, cmp);
  42. // i是考虑灰色还需要再购买的套装数
  43. for (int i = ; ; i++) {
  44. if (getGray(i) >= gray) {
  45. printf("%d\n", ans + i);
  46. break;
  47. }
  48. }
  49. }
  50. return ;
  51. }

感觉像是ZOJ3778的一个加强版

Painter的更多相关文章

  1. HDOJ 题目2474 String painter(区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. little tips of painter.drawRect in Qt

    一个QImage或QPixmap新建变量时,第一次填充图片时设置的宽高正常(fill),其后的绘制操作(draw)则会在绘制的矩形底边和右边加上painter.pen().width() 在下面代码1 ...

  3. HT for Web 中Painter的介绍及用法

    鉴于许多同学对Painter不熟悉,所以撰写此文介绍下.Painter的中文意思是画家.漆工,那放到HT里是什么意思呢?很简单,这是HT特有的一种接口,允许开发者在拓扑及其它通用组件上使用Canvas ...

  4. hdu2476 String painter(区间dp)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...

  5. Corel Painter 15在Surface Pro 4下开启笔触压力感应

    之前一直是用Wacom的板子,所以只需要下载Wacom板子相应的驱动安装即可就能在PS和Corel Painter中开启压力感应来调节笔触出线的粗细.Surface Pro 4的笔是支持压力感应的,但 ...

  6. 模拟+思维 HDOJ 5319 Painter

    题目传送门 /* 题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次 模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最 ...

  7. poj 1681 Painter's Problem

    Painter's Problem 题意:给一个n*n(1 <= n <= 15)具有初始颜色(颜色只有yellow&white两种,即01矩阵)的square染色,每次对一个方格 ...

  8. ZRender源码分析4:Painter(View层)-中

    回顾 上一篇说到:ZRender源码分析3:Painter(View层)-上,接上篇,开始Shape对象 总体理解 先回到上次的Painter的render方法 /** * 首次绘图,创建各种dom和 ...

  9. ZRender源码分析3:Painter(View层)-上

    回顾 上一篇说到:ZRender源码分析2:Storage(Model层),这次咱看来看看Painter-View层 总体理解 Painter这个类主要负责MVC中的V(View)层,负责将Stora ...

  10. The Painter's Partition Problem Part II

    (http://leetcode.com/2011/04/the-painters-partition-problem-part-ii.html) This is Part II of the art ...

随机推荐

  1. JS用例

    showBtn :class="{getInput:showBtn}"v-if="showBtn" showBtn: true, this.showBtn = ...

  2. Java 继承(extends)、抽象类(abstract)的特点用法原理(7)

    Java  中的继承 继承: java中的抽象类用法原理: /* 当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特 ...

  3. uploadify ASP.net 使用笔记

    <script type="text/javascript" src="jquery.uploadify.min.js"></script & ...

  4. str_replace用法

    语法 str_replace(find,replace,string,count) 参数 描述 find 必需.规定要查找的值. replace 必需.规定替换 find 中的值的值. string ...

  5. 吴裕雄--天生自然Linux操作系统:Linux vi/vim

    Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主 ...

  6. springCloud eureka服务治理集群增加安全认证

    做为SpringCloud Netflix服务套件中的一部分,springCloud eureka基于Netflix Eureka做了二次封装,默认提供WEB管理页面及服务治理. 为了确保在生产环境中 ...

  7. Hard Disk Driver(GPT)

    GUID磁盘分区表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准.它是可扩展固件接口(EFI)标准(被Intel用 ...

  8. HDU - 4578 线段树+三重操作

    这道题自己写了很久,还是没写出来,也看了很多题解,感觉多数还是看的迷迷糊糊,最后面看到一篇大佬的才感觉恍然大悟. 先上一篇大佬的题解:https://blog.csdn.net/aqa20372995 ...

  9. soap,restful 两种web service实现方式比较

    web service服务 目前常用的实现web service的方式有有两种 1.SOAP 原始的web service标准,一堆标准,不过这些标准是在开发框架中实现的,有上层接口,可以调用 2.R ...

  10. java中集合,数组,字符串相互转换

    数组转List String[] staffs = new String[]{"Tom", "Bob", "Jane"}; List sta ...