Painter
描述
杂货店出售一种由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
输出
每组数据输出一行,最少需要的套装数。
- 样例输入
- 
3 40 95 21 0 
 7 25 60 400 250 0 60 0 500
 4 90 95 75 95 10
 5 0 0 0 0 0 333
 0
- 样例输出
- 
2 
 8
 2
 4
 这题的难点在于已知各种颜料剩余量,求能够合成的灰色颜料的重量,想了好久,终于得出如下结论#include "bits/stdc++.h" 
 using namespace std;
 const int INF = 0x3f3f3f3f;
 int arr[];
 int n, gray, ans, rest;
 bool cmp(int n, int m) {
 return n > m;
 }
 int getGray(int m) {
 int ans = INF;
 // 第一种情况是所以多余出来的颜料的总量除3
 // 按n = 4举例 3 4 5 6 能合除 6ml 的灰色颜料
 ans = min(ans, (rest + m * n * ) / );
 // 第二种情况是剩余量最多的那种颜料合完灰色还有多余
 // 按n = 4举例 3 4 5 100 能合除 6ml 的灰色颜料
 ans = min(ans, (rest - arr[] + m * (n - ) * ) / );
 // 第三种情况是剩余量最多的两种颜料合完灰色还有多余
 // 按n = 4举例 3 4 100 100 能合出 7ml 的灰色颜料
 ans = min(ans, rest - arr[] - arr[] + m * (n - ) * );
 return ans;
 }
 int main() {
 while (scanf("%d", &n) && n) {
 int mx = ;
 for (int i = ; i < n; i++) {
 scanf("%d", &arr[i]);
 // 找到需求最多的颜料的重量
 mx = max(mx, arr[i]);
 }
 scanf("%d", &gray);
 // 不考虑灰色要买的套装数量
 ans = mx % ? mx / + : mx / ;
 rest = ;
 for (int i = ; i < n; i++) {
 // 记录第i种颜料多余出来的重量
 arr[i] = ans * - arr[i];
 // 记录多余出来的颜料的总重量
 rest += arr[i];
 }
 // 按多余出来的重量降序排序
 sort(arr, arr + n, cmp);
 // i是考虑灰色还需要再购买的套装数
 for (int i = ; ; i++) {
 if (getGray(i) >= gray) {
 printf("%d\n", ans + i);
 break;
 }
 }
 }
 return ;
 }感觉像是ZOJ3778的一个加强版 
Painter的更多相关文章
- HDOJ 题目2474 String painter(区间DP)
		String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ... 
- little tips of painter.drawRect in Qt
		一个QImage或QPixmap新建变量时,第一次填充图片时设置的宽高正常(fill),其后的绘制操作(draw)则会在绘制的矩形底边和右边加上painter.pen().width() 在下面代码1 ... 
- HT for Web 中Painter的介绍及用法
		鉴于许多同学对Painter不熟悉,所以撰写此文介绍下.Painter的中文意思是画家.漆工,那放到HT里是什么意思呢?很简单,这是HT特有的一种接口,允许开发者在拓扑及其它通用组件上使用Canvas ... 
- hdu2476 String painter(区间dp)
		题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ... 
- Corel Painter 15在Surface Pro 4下开启笔触压力感应
		之前一直是用Wacom的板子,所以只需要下载Wacom板子相应的驱动安装即可就能在PS和Corel Painter中开启压力感应来调节笔触出线的粗细.Surface Pro 4的笔是支持压力感应的,但 ... 
- 模拟+思维 HDOJ 5319 Painter
		题目传送门 /* 题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次 模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最 ... 
- poj 1681 Painter's Problem
		Painter's Problem 题意:给一个n*n(1 <= n <= 15)具有初始颜色(颜色只有yellow&white两种,即01矩阵)的square染色,每次对一个方格 ... 
- ZRender源码分析4:Painter(View层)-中
		回顾 上一篇说到:ZRender源码分析3:Painter(View层)-上,接上篇,开始Shape对象 总体理解 先回到上次的Painter的render方法 /** * 首次绘图,创建各种dom和 ... 
- ZRender源码分析3:Painter(View层)-上
		回顾 上一篇说到:ZRender源码分析2:Storage(Model层),这次咱看来看看Painter-View层 总体理解 Painter这个类主要负责MVC中的V(View)层,负责将Stora ... 
- 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 ... 
随机推荐
- android中shape的使用(android:angle小解)
			本文参考http://kofi1122.blog.51cto.com/2815761/521605和http://blog.csdn.net/qizi329/article/details/63098 ... 
- php empty,isset,is_null判断比较(差异与异同)
			php empty,isset,is_null判断比较(差异与异同) 作者: 字体:[增加 减小] 类型:转载 做php开发时候,想必在使用:empty,isset,is_null 这几个函数时候,遇 ... 
- UML-SSD-为什么要画SSD?
			需求文本看着过于抽象,采用SSD一目了然. 在设计软件之前,分析人员会关注系统会发生那些事件? 1.基本上,软件系统要对以下3种事件进行响应: 1).来自于参与者(人或计算机)的外部事件 2).时间事 ... 
- Django专题-auto模块
			Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ... 
- Linux中的各种文件类型
			Linux中有一句话:一切皆是文件 1.普通文件( - regular file ) (1).文本文件 文件中的内容是由文本构成的,文本指的是ASCII码字符.文件里的内容本质上都是数字( ... 
- swoole使用异步redis
			1.lnmp安装redis拓展 wget http://download.redis.io/releases/redis-4.0.9.tar.gz chmod 755 redis-4.0.9.tar. ... 
- no.2淘宝架构背后——零售业务中台架构设计探讨及实践读后感
			2017年8月12日,袋鼠云首席架构师正风在“网易博学实践日:大数据与人工智能技术大会”进行<淘宝架构演进背后——零售业务中台架构设计探讨及实践>演讲分享.传统零售行业如何选择应对新经济模 ... 
- CodeForces 1005D Polycarp and Div 3(思维、贪心、dp)
			http://codeforces.com/problemset/problem/1005/D 题意: 给一个仅包含数字的字符串,将字符串分割成多个片段(无前导0),求这些片段里最多有多少是3的倍数 ... 
- postman测试
			Postman接口性能测试 1.从文件中获取参数,然后点击Runner 2.勾选测试用例,配置用例次数.参数文件.返回data等 3.点击run 测试用例 4.查看测试结果 5.测试接口:https: ... 
- FastReport 使用入门
			FastReport 是微软开发的一款快速报表工具,使用起来非常方便简单 最关键的是快捷. 下面介绍一下 Fastreport在项目中的使用. 下图为其中一个效果图 首先 打开FastReport ... 
