一般网站维护要多久/网站制作企业
题目地址:
https://www.lintcode.com/problem/group-buy/description
有xxx人想买AAA商品,yyy人想买BBB商品,zzz人想买CCC商品。给定一个“团购”规则:
1、每次团购一共必须买333个商品;
2、每次团购必须包含AAA和BBB商品。
问最多能进行多少次团购。
团购的形式必然是A+A+BA+A+BA+A+B或者A+B+BA+B+BA+B+B或者A+B+CA+B+CA+B+C。设这三个形式分别有a,b,ca,b,ca,b,c个,则相当于要在约束{a+b+2c≤xa+2b+c≤ya≤z\begin{cases} a+b+2c\le x\\ a+2b+c\le y\\ a\le z \end{cases}⎩⎪⎨⎪⎧a+b+2c≤xa+2b+c≤ya≤z下,求a+b+ca+b+ca+b+c的最大值。设u=a+b+cu=a+b+cu=a+b+c,首先容易看出u≤min{x,y}u\le \min\{x,y\}u≤min{x,y},三个式子相加后除以333又能得到u≤⌊x+y+z3⌋u\le \lfloor\frac{x+y+z}{3}\rflooru≤⌊3x+y+z⌋。则uuu的最大值就是min{x,y,⌊x+y+z3⌋}\min\{x,y,\lfloor\frac{x+y+z}{3}\rfloor\}min{x,y,⌊3x+y+z⌋}(可以把三个不等式看成空间里的三个平面与a=0,b=0,c=0a=0,b=0,c=0a=0,b=0,c=0围成的区域,相当于要找离远点垂直距离最远的、并且与该区域有交集的平面a+b+c=ua+b+c=ua+b+c=u的uuu值。画图容易看出,最远的uuu就是min{x,y,⌊x+y+z3⌋}\min\{x,y,\lfloor\frac{x+y+z}{3}\rfloor\}min{x,y,⌊3x+y+z⌋}。这其实是线性规划问题)。代码如下:
public class Solution {/*** @param x: the number of people who plan to buy goods A.* @param y: the number of people who plan to buy goods B.* @param z: the number of people who plan to buy goods C.* @return: return the maximum times they can group buy.*/public int groupBuyTimes(int x, int y, int z) {// write your code hereint res = (x + y + z) / 3;res = Math.min(res, x);res = Math.min(res, y);return res;}
}
时空复杂度O(1)O(1)O(1)。