现在有 分水果(冬季每日一题 21)_二进制 个苹果,分水果(冬季每日一题 21)_枚举_02 个香蕉,分水果(冬季每日一题 21)_枚举_03

你要将这些水果分给尽可能多的小朋友。

假设一个小朋友分到的苹果数量为 分水果(冬季每日一题 21)_二进制_04,香蕉数量为 分水果(冬季每日一题 21)_枚举_05,橘子数量为 分水果(冬季每日一题 21)_打表_06

在分发水果时,需要满足:

  • 每个小朋友至少要分到一个水果,即 分水果(冬季每日一题 21)_二进制_07
  • 每个小朋友分到的苹果数量不得超过 分水果(冬季每日一题 21)_打表_08,香蕉数量不得超过 分水果(冬季每日一题 21)_打表_08,橘子数量不得超过 分水果(冬季每日一题 21)_打表_08,即 分水果(冬季每日一题 21)_数据_11
  • 任意两个小朋友分到的水果均不完全相同,即所有三元组 分水果(冬季每日一题 21)_枚举_12

请问,最多可以将水果分给多少个小朋友。

输入格式
第一行包含整数 分水果(冬季每日一题 21)_打表_13,表示共有 分水果(冬季每日一题 21)_打表_13

每组数据占一行,包含三个整数 分水果(冬季每日一题 21)_ci_15

输出格式
每组数据输出一行结果,表示可以分到水果的小朋友的最大数量。

数据范围
分水果(冬季每日一题 21)_ci_16
分水果(冬季每日一题 21)_枚举_17
输入样例:

7
1 2 1
0 0 0
9 1 7
2 2 3
2 3 2
3 2 2
4 4 4

输出样例:

3
0
4
5
5
5
7

#include<iostream>

using namespace std;

int q[10][5];

void init(){
for(int i = 1; i < 1 << 3; i++) {
q[i][0] = i & 1;
q[i][1] = i >> 1 & 1;
q[i][2] = i >> 2 & 1;
}
}

int main(){

int t;
cin >> t;

init();

int a, b, c;
while(t--){

cin >> a >> b >> c;

int sa, sb, sc, cnt;
int res = 0;
for(int i = 1; i < 1 << 7; i++){
sa = sb = sc = cnt = 0;
for(int j = 0; j < 7; j++){
if(i >> j & 1){
cnt++;
sa += q[j+1][0], sb += q[j+1][1], sc += q[j+1][2];
}
}
if(sa <= a && sb <= b && sc <= c) res = max(res, cnt);
}
cout << res << endl;
}

return 0;
}