解题思路

A希望最后剩下的越大越好,B希望最后剩下的越小越好,C希望最后剩下的越逼近0越好。
那么对应出手顺序,我们可以知道。
1、我们假设A留下了其中一张牌
2、B在知道A留下什么牌的情况下,再去枚举留下的牌,并且预判C会出的牌,全部答案里面出最小的。
3、C没有办法,AB牌已经固定,只能选择最趋于0的,正数!!!一定要仔细看题目吖!!
4、再去枚举另一张A牌,回到2。

Code

#include <bits/stdc++.h>
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
typedef long long ll;

inline int read() {
    int s = 0, w = 1; char ch = getchar();
    while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }
    while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
    return s * w;
}

const int N = 100 + 7;
const int INF = 0x3f3f3f3f;
int a[N], b[N], c[N];
int n;

int dfs2(int now) {
    int ans = INF;
    for (int i = 1; i <= n; ++i) {
        if (abs(now + c[i]) < abs(ans))
            ans = now + c[i];
        else if (abs(now + c[i]) == abs(ans))
            ans = max(ans, now + c[i]);
    }
    return ans;
}

int dfs(int now) {
    int ans = INF;
    for (int i = 1; i <= n; ++i)
        ans = min(ans, dfs2(now + b[i]));
    return ans;
}

int main() {
    n = read();
    for (int i = 1; i <= n; ++i)    a[i] = read();
    for (int i = 1; i <= n; ++i)    b[i] = read();
    for (int i = 1; i <= n; ++i)    c[i] = read();
    int ans = -INF;
    for (int i = 1; i <= n; ++i)
        ans = max(ans, dfs(a[i]));
    printf("%d\n", ans);
    return 0;
}