Submission #1155690

#TimeUsernameProblemLanguageResultExecution timeMemory
1155690dinhBootfall (IZhO17_bootfall)C++17
13 / 100
418 ms326496 KiB
#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 + 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...