比赛 2026.9.12 评测结果 AAAAAAAAAA
题目名称 分饼干 最终得分 100
用户昵称 RpUtl 运行时间 0.938 s
代码语言 C++ 内存使用 9.30 MiB
提交时间 2026-09-12 10:05:23
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int inf = 1e9;
int n, s, f[2][N], a[55];
inline void cmax(int &u, int v) {
    u = max(u, v);
}
int main() {
    freopen("cookie.in", "r", stdin);
    freopen("cookie.out", "w", stdout); 
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        s += a[i];
    }
    for (int i = -s; i <= s; i++) f[0][i + s] = f[1][i + s] = -inf;
    f[0][s] = 0; 
    for (int i = 0; i < n; i++) {
        int o = (i & 1), v = a[i + 1];
        for (int j = -s; j <= s; j++) {
            cmax(f[o ^ 1][j + s], f[o][j + s]); 
            if (j - v >= -s) cmax(f[o ^ 1][j - v + s], f[o][j + s] + v);
            if (j + v <= s)  cmax(f[o ^ 1][j + v + s], f[o][j + s] + v);
            f[o][j + s] = -inf;
        }
    }
    cout << f[n & 1][s] / 2 << '\n';
    return 0;
}