#include<bits/stdc++.h>
using namespace std;
/*
3 5 7 11 9 13
*/
vector<int> solve(vector<int>& nums) {
int sum = 0;
for (auto x: nums) {
sum += x;
}
nums.push_back(0);
vector<vector<vector<int>>> dp(nums.size()+1, vector<vector<int>>(nums.size()+1, vector<int>(sum*2 + 1)));
for (int i=0;i<=nums.size();i++) {
for (int j=0;j<=nums.size();j++) {
dp[i][j][0] = true;
}
}
for (int i=1;i<=nums.size();i++) {
for (int s=1;s<=sum;s++) {
for (int j=1;j<=nums.size();j++) {
dp[i][j][s] |= dp[i][j-1][s];
if (j != i && s >= nums[j - 1]) {
dp[i][j][s] |= dp[i][j-1][s - nums[j-1]];
}
// cout << dp[i][j][s] << ' ';
}
// cout << endl;
}
// cout << endl;
}
vector<int> res;
for (int x=1;x<=sum;x++) {
int ok = true;
for (int i=1;i<nums.size();i++) {
int target = sum - nums[i-1] + x;
if (target % 2 == 1) {
ok = false;
break;
}
if (!dp[i][nums.size()-1][target / 2]) {
ok = false;
break;
}
}
if (ok && dp[nums.size()][nums.size()][sum / 2] && sum % 2 == 0) {
res.push_back(x);
}
}
return res;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i=0;i<n;i++) {
cin >> nums[i];
}
auto res = solve(nums);
cout << res.size() << endl;
for (auto x: res)
cout << x << ' ';
return 0;
}
/*
3 5 7 11 9 13
x
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |