这题没什么好说的
考虑所有情况然后写就完了
虽然赛场上 交完不知道答案(doge)
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
//能优先安排6人桌,要先安排6人桌
//6人桌可以是2+2+2 或者 3+3 或者4+2
//优先用3+3组合,因为3人寝只能凑6人桌
//2+2+2 和 4+2 优先用哪个都一样
//因为剩下奇数个2还是偶数个2都能去搭配
while (n--) {
int a2, a3, a4, b4, b6;
cin >> a2 >> a3 >> a4 >> b4 >> b6;
int res = 0;
//先凑6人
while (b6) {
//3+3
if (a3 / 2 > 0 && a3) {
res += 6;
a3 -= 2;
b6 -= 1;
continue;
}
//4+2(2+2+2也可以)
if (a4 && a2) {
res += 6;
a4 -= 1;
a2 -= 1;
b6 -= 1;
continue;
}
//最后凑2+2+2
if (a2 / 3 != 0 && a2) {
res += 6;
a2 -= 3;
b6 -= 1;
continue;
}
//凑不出来6人就break
//凑6人2+2+2 或者a3>=2 或者 1个4 1个2
if ((a2 == 0 && a3 < 2) || (a2 < 3 && a3 < 2 && a4 == 0))break;
}
//凑4人
while (b4 > 0) {
//凑4人桌的优先级也是一样的(找不出来反例)
if (a4) {
a4 -= 1;
res += 4;
b4 -= 1;
continue;
}
if (a2 / 2 != 0 && a2) {
a2 -= 2;
res += 4;
b4 -= 1;
continue;
}
//凑不出来4人就break
//凑4人 2+2 或者 4
if (a2 <= 1 && a4 == 0)break;
}
//最后盘算坐不满的情况
//比如一个6人桌给两个人坐
while (b6) {
if (a2 && a3) {
a2 -= 1;
a3 -= 1;
res += 5;
b6 -= 1;
}
else if (a4) {
a4 -= 1;
b6 -= 1;
res += 4;
}
else if (a3) {
a3 -= 1;
b6 -= 1;
res += 3;
}
else if (a2) {
a2 -= 1;
b6 -= 1;
res += 2;
}
else break;
}
while (b4) {
if (a3 > 0) {
b4 -= 1;
a3 -= 1;
res += 3;
}
else if (a2) {
b4 -= 1;
a2 -= 1;
res += 2;
}
else break;
}
cout << res << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
while (n-- > 0) {
int a2 = scanner.nextInt();
int a3 = scanner.nextInt();
int a4 = scanner.nextInt();
int b4 = scanner.nextInt();
int b6 = scanner.nextInt();
int res = 0;
// 先凑6人
while (b6 > 0) {
// 3+3
if (a3 >= 2) {
res += 6;
a3 -= 2;
b6 -= 1;
continue;
}
// 4+2
if (a4 > 0 && a2 > 0) {
res += 6;
a4 -= 1;
a2 -= 1;
b6 -= 1;
continue;
}
// 2+2+2
if (a2 >= 3) {
res += 6;
a2 -= 3;
b6 -= 1;
continue;
}
// 凑不出来6人就break
if ((a2 == 0 && a3 < 2) || (a2 < 3 && a3 < 2 && a4 == 0)) {
break;
}
}
// 凑4人
while (b4 > 0) {
// 凑4人桌的优先级也是一样的(找不出来反例)
if (a4 > 0) {
a4 -= 1;
res += 4;
b4 -= 1;
continue;
}
if (a2 >= 2) {
a2 -= 2;
res += 4;
b4 -= 1;
continue;
}
// 凑不出来4人就break
if (a2 <= 1 && a4 == 0) {
break;
}
}
// 最后盘算坐不满的情况
while (b6 > 0) {
if (a2 > 0 && a3 > 0) {
a2 -= 1;
a3 -= 1;
res += 5;
b6 -= 1;
} else if (a4 > 0) {
a4 -= 1;
res += 4;
b6 -= 1;
} else if (a3 > 0) {
a3 -= 1;
res += 3;
b6 -= 1;
} else if (a2 > 0) {
a2 -= 1;
res += 2;
b6 -= 1;
} else {
break;
}
}
while (b4 > 0) {
if (a3 > 0) {
b4 -= 1;
a3 -= 1;
res += 3;
} else if (a2 > 0) {
b4 -= 1;
a2 -= 1;
res += 2;
} else {
break;
}
}
System.out.println(res);
}
scanner.close();
}
}