Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. #include "ReadWriter.h"
  2. //vector, string, iostream included in "ReadWriter.h"
  3. //не компилилось
  4. using namespace std;
  5.  
  6. //Можно добавлять любые вспомогательные методы и классы для решения задачи.
  7.  
  8. //Задача реализовать этот метод
  9. //param N - количество камней
  10. //param M - ограничения на вес
  11. //param stones - массив размера N, с весами камней
  12. //param res - вектор результатов (вес камней, которые надо взять)
  13. void solve(int N, int W, int *stones, vector<int> &res)
  14. {
  15. vector<vector<int>> help_arr(N + 1, vector<int>(W + 1));
  16.  
  17. for (int i = 1; i <= N; ++i)
  18. {
  19. for (int j = stones[i - 1], help = 0; j <= W; ++j)
  20. {
  21. if (i == 5 && j == 11)
  22. int hjkjhgf = 5;
  23. int tmp = stones[i - 1];
  24. // while (k < i)
  25. // {
  26. // if (tmp + stones[k] <= j)
  27. // tmp += stones[k];
  28. // if (k + 1 > i - 1)
  29. // break;
  30. // ++k;
  31. // }
  32. if (i > 1 && tmp + stones[i - 2] < j)
  33. {
  34. help = 0;
  35. }
  36. for (int k = help; k < i - 1 && tmp + stones[k] <= j; ++k)
  37. {
  38. tmp += stones[k];
  39. help++;
  40. }
  41. help_arr[i][j] = max(max(help_arr[i - 1][j], tmp), help_arr[i][j - 1]);
  42. // if (help_arr[i - 1][j] <= tmp) help_arr[i][j] = tmp;
  43. // else help_arr[i][j] = help_arr[i - 1][j];
  44. }
  45. }
  46.  
  47. int tmp = help_arr[N][W];
  48. for (int i = N; i > 0;)
  49. {
  50. res.insert(res.begin(), stones[i - 1]);
  51. tmp -= stones[--i];
  52. while (help_arr[i][tmp] == 0 && i > 0) --i;
  53. }
  54. int c = 0;
  55.  
  56. }
  57.  
  58. int main(int argc, const char *argv[])
  59. {
  60. ReadWriter rw;
  61. int N = rw.readInt(); //камни
  62. int W = rw.readInt(); //ограничения на вес
  63. int *arr = new int[N]; //имеющиеся камни
  64. rw.readArr(arr, N);
  65.  
  66. //основной структурой выбран вектор, так как заранее неизвестно какое количество камней будет взято
  67. vector<int> res;
  68. //решаем задачу
  69. solve(N, W, arr, res);
  70. int sum = 0;
  71. for (int i = 0; i < res.size(); i++)
  72. sum += res.at(i);
  73.  
  74. //записываем ответ в файл
  75. rw.writeInt(sum); //итоговый вес
  76. rw.writeInt(res.size()); //количество взятых камней
  77. rw.writeVector(res); //сами камни
  78.  
  79. delete[] arr;
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement