# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
538020 | 2022-03-16T03:15:08 Z | rin_tohsaka | Kpart (eJOI21_kpart) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; int k[1010], p[1010], dp[1010][50010],c; int main(){ cin>>c; for(int cc = 0; cc < c; cc++){ int n; cin >> n; p[0] = 0; for (int i = 1; i <= n; i++){ cin >> k[i]; } for (int i = 1; i <= n; i++) p[i] = p[i-1] + k[i]; vector<bool> work(n+1, 1); for (int i = 1; i <= n; i++){ for (int x = 0; sum < vec[i]; sum++) dp[i][sum] = dp[i - 1][sum]; for (int x = k[i]; x< 50010; x++){ dp[i][x] = max(dp[i - 1][x], dp[i - 1][x-k[i]]); } dp[i][k[i]] = i; for (int j = 1; j <= i; j++){ int x = p[i] - p[j - 1]; if (x % 2){ work[i+1-j] = 0; } else if (dp[i][x/ 2] < j){ work[i+1-j] = 0; } } } int ans=0; for (int i = 1; i <= n; i++) if (work[i])ans++; cout << ans << " "; for (int i = 1; i <= n; i++) if (work[i])cout << i << ' '; cout << '\n'; } return 0; }