Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ReadWriter.h"
- //vector, string, iostream included in "ReadWriter.h"
- //не компилилось
- using namespace std;
- //Можно добавлять любые вспомогательные методы и классы для решения задачи.
- //Задача реализовать этот метод
- //param N - количество камней
- //param M - ограничения на вес
- //param stones - массив размера N, с весами камней
- //param res - вектор результатов (вес камней, которые надо взять)
- void solve(int N, int W, int *stones, vector<int> &res)
- {
- vector<vector<int>> help_arr(N + 1, vector<int>(W + 1));
- for (int i = 1; i <= N; ++i)
- {
- for (int j = stones[i - 1], help = 0; j <= W; ++j)
- {
- if (i == 5 && j == 11)
- int hjkjhgf = 5;
- int tmp = stones[i - 1];
- // while (k < i)
- // {
- // if (tmp + stones[k] <= j)
- // tmp += stones[k];
- // if (k + 1 > i - 1)
- // break;
- // ++k;
- // }
- if (i > 1 && tmp + stones[i - 2] < j)
- {
- help = 0;
- }
- for (int k = help; k < i - 1 && tmp + stones[k] <= j; ++k)
- {
- tmp += stones[k];
- help++;
- }
- help_arr[i][j] = max(max(help_arr[i - 1][j], tmp), help_arr[i][j - 1]);
- // if (help_arr[i - 1][j] <= tmp) help_arr[i][j] = tmp;
- // else help_arr[i][j] = help_arr[i - 1][j];
- }
- }
- int tmp = help_arr[N][W];
- for (int i = N; i > 0;)
- {
- res.insert(res.begin(), stones[i - 1]);
- tmp -= stones[--i];
- while (help_arr[i][tmp] == 0 && i > 0) --i;
- }
- int c = 0;
- }
- int main(int argc, const char *argv[])
- {
- ReadWriter rw;
- int N = rw.readInt(); //камни
- int W = rw.readInt(); //ограничения на вес
- int *arr = new int[N]; //имеющиеся камни
- rw.readArr(arr, N);
- //основной структурой выбран вектор, так как заранее неизвестно какое количество камней будет взято
- vector<int> res;
- //решаем задачу
- solve(N, W, arr, res);
- int sum = 0;
- for (int i = 0; i < res.size(); i++)
- sum += res.at(i);
- //записываем ответ в файл
- rw.writeInt(sum); //итоговый вес
- rw.writeInt(res.size()); //количество взятых камней
- rw.writeVector(res); //сами камни
- delete[] arr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement