A. Fast Food Restaurant

题意:题意说餐馆准备了a份饺子,b份橘子汁,c份烙饼
有以下规则:1.每份游客至少得到一份菜
2.每位游客最多可以获赠一份饺子,一份橘子汁,一份烙饼
3.每位游客的菜肴不同

分析:我们可以得出最多能够接待7位顾客,我们可以采用暴力做法,枚举每种组合,2^7,也就是a b c ab ac bc abc这7种组合,每种组合都可以选或不选每个菜肴,然后再判断是否超过给出的已经准备好的菜肴,然后再更新答案,我们可以用一个二级制压缩的小技巧去遍历27的组合,从0遍历到27,每个二进制数对应选择的方式,比如0010010,表示选择了ab、bc这两种菜肴,然后有2个b,1个a,1个c,然后判断是否超过给出的初始菜肴,然后再去更新答案。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
 
using namespace std;
 
int main()
{
	int t;
	scanf("%d", &t);
 
	while (t--)
	{
		int ta, tb, tc;
		scanf("%d%d%d", &ta, &tb, &tc);
 
		int res = 0;
		for (int i = 0; i < 1 << 7; ++i)
		{
			int sum = 0;
			int a = 0, b = 0, c = 0;
			for (int j = 0; j < 7; ++j)
			{
				if (i >> j & 1)
				{
					++sum;
					if (j == 0)
						++a;
					else if (j == 1)
						++b;
					else if (j == 2)
						++c;
					else if (j == 3)
						++a, ++b;
					else if (j == 4)
						++a, ++c;
					else if (j == 5)
						++b, ++c;
					else
						++a, ++b, ++c;
				}
			}
			if (a <= ta && b <= tb && c <= tc)
				res = max(res, sum);
		}
		printf("%d
", res);
	}
 
	
 
	return 0;
}
原文地址:https://www.cnblogs.com/pixel-Teee/p/12394642.html