Guest User

Untitled

a guest
Feb 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <limits.h>
  6. using namespace std;
  7.  
  8. const int inf = INT_MAX;
  9.  
  10. int main() {
  11. int n = 0, w, k;
  12. cin >> w;
  13. vector<int> m;
  14. vector<int> c;
  15.  
  16. while (cin >> k) {
  17. m.push_back(k);
  18. ++n;
  19. }
  20. while (cin >> k) {
  21. c.push_back(k);
  22. }
  23. n = c.size();
  24.  
  25. vector<vector<int>> dp(n + 1, vector<int>(w + 1, inf));
  26. vector<vector<int>> p(n + 1, vector<int>(w + 1, -1));
  27.  
  28. for (int i = 0; i <= w; ++i) {
  29. dp[0][i] = 0;
  30. }
  31.  
  32.  
  33. for (int i = 1; i <= n; ++i) {
  34. for (int j = 0; j <= w; ++j) {
  35. dp[i][j] = dp[i - 1][j];
  36. if (j - m[i - 1] >= 0 && dp[i - 1][j - m[i - 1]] != inf && dp[i - 1][j - m[i - 1]] + c[i - 1] > dp[i - 1][j]) {
  37. dp[i][j] = dp[i - 1][j - m[i - 1]] + c[i - 1];
  38. p[i][j] = i;
  39. }
  40. }
  41. }
  42.  
  43. vector<int> res;
  44.  
  45. for (int i = n; i >= 0; --i) {
  46. if (w >= 0 && p[i][w] > 0) {
  47. res.push_back(p[i][w]);
  48. w -= m[i - 1];
  49. }
  50. }
  51. reverse(begin(res), end(res));
  52. for (int i : res)
  53. cout << i << endl;
  54. }
Add Comment
Please, Sign In to add comment