比赛 2026.9.12 评测结果 TTTTTTTTTT
题目名称 分饼干 最终得分 0
用户昵称 LikableP 运行时间 11.007 s
代码语言 C++ 内存使用 3.38 MiB
提交时间 2026-09-12 10:58:58
显示代码纯文本
#include <cstdio>
#include <vector>
#include <numeric>
#include <algorithm>

int n;
int a[100];
int ans;

bool canchoose(std::vector<int> &vec, int target) {
    int sum = std::accumulate(vec.begin(), vec.end(), 0), len = (int) vec.size();
    if (sum < target) return false;
    if (sum == target) return true;
    for (int mask = 1; mask < (1 << len); ++mask) {
        int littlesum = 0;
        for (int i = 0; i < len; ++i) {
            if (mask >> i & 1) {
                littlesum += vec[i];
            } 
        }
        if (littlesum == target) return true;
    }
    return false;
}

int main() {
    freopen("cookie.in", "r", stdin);
    freopen("cookie.out", "w", stdout);
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
    }
    
    for (int mask = 1; mask < (1 << n); ++mask) {
        std::vector<int> choose, unchoose;
        for (int i = 1; i <= n; ++i) {
            if (mask >> (i - 1) & 1) {
                choose.push_back(a[i]);
            } else {
                unchoose.push_back(a[i]);
            }
        }
        
        int sum = std::accumulate(choose.begin(), choose.end(), 0);
        
        if (canchoose(unchoose, sum)) {
            ans = std::max(ans, sum);
        }
    }
    
    printf("%d\n", ans);
    return 0;
}