| 比赛 |
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;
}