fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll int
  6. #define ull unsigned ll
  7. #define ld long double
  8. typedef vector<int> vi;
  9. typedef multiset<int> mi;
  10. typedef multiset<ll> mll;
  11. typedef vector<ll> vll;
  12. typedef vector<bool> vb;
  13. typedef vector<string> vs;
  14. typedef set<ll> sll;
  15. typedef vector<vector<int>> _2vi;
  16. typedef vector<vector<ll>> _2vll;
  17. #define all(v) ((v).begin()), ((v).end())
  18. #define sz(v) ((ll)((v).size()))
  19.  
  20. #define vinp(v, n) \
  21.   for (ull i = 0; i < (n); i++) \
  22.   cin >> (v)[i]
  23. #define printv(v) \
  24.   for (auto i : (v)) \
  25.   cout << i << " "
  26. #define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
  27. #define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
  28. #define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
  29. #define _CRT_SECURE_NO_WARNING
  30. const ll MOD = 1000000007;
  31.  
  32. void Bustany() {
  33. ios_base::sync_with_stdio(false);
  34. cin.tie(NULL);
  35. cout.tie(NULL);
  36. #ifndef ONLINE_JUDGE
  37. freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
  38. #endif
  39. }
  40.  
  41. const ll N = 1e5 + 5;
  42. //vector<sll> adj(N);
  43. //_2vll adj(N,vll(N));
  44. //vb vis;
  45.  
  46. ll n, k;
  47. vll v;
  48. char dp[501][501][501];
  49.  
  50. bool rec(ll ind, ll remK, ll remX) {
  51. if (ind == n) {
  52. return remK == 0 && remX == 0;
  53. }
  54. if (remX > remK)return 0;
  55. auto &res = dp[ind][remK][remX];
  56. if (~res)return res;
  57. bool ch1 = 0, ch2 = 0, ch3 = 0;
  58. ch1 = rec(ind + 1, remK, remX);
  59. if (ch1)return res = 1;
  60. if (remK >= v[ind]) {
  61. ch2 = rec(ind + 1, remK - v[ind], remX);
  62. if (ch2)return res = 1;
  63. if (remX >= v[ind]) {
  64. ch3 = rec(ind + 1, remK - v[ind], remX - v[ind]);
  65. return res = ch3;
  66. }
  67. }
  68. return res = 0;
  69. }
  70.  
  71.  
  72. void solve() {
  73. cin >> n >> k;
  74. v.assign(n, 0);
  75. memset(dp, -1, sizeof dp);
  76. vinp(v, n);
  77. vll ans;
  78. for (ll i = 0; i <= k; i++) {
  79. if (rec(0, k, i))
  80. ans.push_back(i);
  81. }
  82. cout << ans.size() << '\n';
  83. for (auto i: ans) {
  84. cout << i << " ";
  85. }
  86. }
  87.  
  88. int main() {
  89. Bustany();
  90. ll t = 1;
  91. // cin >> t;
  92. while (t--) {
  93. solve();
  94. }
  95. }
Success #stdin #stdout 0.02s 126400KB
stdin
Standard input is empty
stdout
1
0