[关闭]
@VecMD 2016-07-08T21:09:58.000000Z 字数 821 阅读 1343

CF 687C

  1. #include <cstdio>
  2. #include <vector>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6. const int maxn = 507;
  7. int coin[maxn], n, m;
  8. int dp[maxn][maxn];
  9. int main(int argc, char const *argv[])
  10. {
  11. std::ios::sync_with_stdio(false);
  12. std::cin >> n >> m;
  13. int sum = 0;
  14. for(int i = 1; i <= n; i ++){
  15. std::cin >> coin[i];
  16. sum += coin[i];
  17. }
  18. dp[0][0] = 1;
  19. for(int i = 1; i <= n; i ++){
  20. for(int j = m; j >= coin[i]; j --){
  21. for(int k = 0; k <= j; k ++){
  22. if(k >= coin[i]) dp[j][k] |= dp[j - coin[i]][k - coin[i]];
  23. dp[j][k] |= dp[j - coin[i]][k];
  24. }
  25. }
  26. }
  27. std::vector<int> ans;
  28. for(int i = 0; i <= m; i ++){
  29. if(dp[m][i]) ans.push_back(i);
  30. }
  31. std::cout << ans.size() << '\n';
  32. for(int i = 0; i < ans.size(); i ++){
  33. if(i) std::cout << ' ';
  34. std::cout << ans[i];
  35. }
  36. std::cout << std::endl;
  37. return 0;
  38. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注