Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. void solve(int N, int W, pair<int, int> *items, int &res)
  8. {
  9. int S[N + 1][W + 1];
  10.  
  11. for (int i = 0; i <= W; i++)
  12. S[0][i] = 0;
  13.  
  14. for (int j = 1; j <= N; j++)
  15. S[j][0] = 0;
  16.  
  17. for (int i = 1; i <= N; ++i)
  18. for (int j = 1; j <= W; ++j)
  19. {
  20. if (j - items[i - 1].first >= 0)
  21. S[i][j] = max(S[i - 1][j - items[i - 1].first] + items[i - 1].second, S[i - 1][j]);
  22. else
  23. S[i][j] = S[i - 1][j];
  24. }
  25.  
  26. int i = N, j = W;
  27.  
  28. while(S[i][j] > 0)
  29. {
  30. if (S[i][j] != S[i - 1][j])
  31. {
  32. j -= items[i - 1].first;
  33. res += items[i - 1].second;
  34. }
  35. --i;
  36. }
  37. }
  38.  
  39. int main()
  40. {
  41. ifstream fin;
  42. ofstream fout;
  43. int N, W;
  44.  
  45. fin.open("input.txt");
  46.  
  47. fin >> N;
  48. fin >> W;
  49.  
  50. pair<int, int> *arr = new pair<int, int>[N];
  51.  
  52. std::string s;
  53. //weight
  54. for (int i = 0; i < N; i++)
  55. fin >> arr[i].first;
  56. std::getline(fin, s); //read empty line
  57. //cost
  58. for (int i = 0; i < N; i++)
  59. fin >> arr[i].second;
  60.  
  61. fin.close();
  62.  
  63. int res = 0;
  64. solve(N, W, arr, res);
  65.  
  66. fout.open("output.txt");
  67. fout << res;
  68. fout.close();
  69.  
  70. delete[] arr;
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement