Submission #1294463

#TimeUsernameProblemLanguageResultExecution timeMemory
1294463gsalterBootfall (IZhO17_bootfall)C++20
0 / 100
1 ms572 KiB
/* */ #include <iostream> #include <vector> using namespace std; const int MOD = 1000000007; void print(const vector<int>& vec) { for (int i=0; i<vec.size(); i++) { cout << vec[i] << ' '; } cout << '\n'; } int main() { int n; cin >> n; vector<int> w(n, 0); int max_x = 0; for (int i=0; i<n; i++) { cin >> w[i]; max_x += w[i]; } vector<int> count(max_x+1); vector<int> dp(max_x+1); vector<int> res; dp[0] = 1; // add everything to the knapsack for (int i=0; i<n; i++) { for (int s=max_x; s>=w[i]; s--) { dp[s] += dp[s-w[i]]; if (dp[s] >= MOD) dp[s] -= MOD; } } // print(dp); for (int i=0; i<n; i++) { // remove w[i] from knapsack for (int s=w[i]; s<=max_x; s++) { dp[s] -= dp[s - w[i]]; if (dp[s] < 0) dp[s] += MOD; } for (int x = 0; x<=max_x; x++) { int curr_sum = max_x - w[i] + x; if (curr_sum < 0 || curr_sum %2 !=0) continue; int target = (curr_sum / 2) - x; if (target >= 0 && dp[target] > 0) { count[x]++; } } // add back w[i] to knapsack for (int s=max_x; s>=w[i]; s--) { dp[s] += dp[s-w[i]]; if (dp[s] >= MOD) dp[s] -= MOD; } } for (int x=0; x<=max_x; x++) { if (count[x] == n) { res.push_back(x); } } cout << res.size() << endl; for (int i=0; i<res.size(); i++) { cout << res[i] << " "; } cout << endl; return 0; }
#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...