Задача о ранце. Как сократить память? - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Получил задание решить классическую задачу о ранце. Есть N предметов, у каждого предмета есть вес и цена, есть ранец, который выдерживает определённый вес. Задача унести как можно больше в денежном эквиваленте(вывести максимальную сумму денег). Задачу я решил, но в одном из 10 тестов на специальном сайте я получил "ошибку" Out of memory, что означает, что нужно как-то уменьшить колл-во памяти. Как я понял я могу использовать то, что мне не нужен список предметов, только суммарный вес, но как это реализовать я не знаю. Вот мой код, жду идеи, предложения
Листинг программы
  1. п»їusing System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using CodEx;
  6. namespace ConsoleApplication17
  7. {
  8. class Program
  9. {
  10. static long max, count;
  11. static long[] vah;
  12. static long[] cen;
  13. static void Main(string[] args)
  14. {
  15. max = long.Parse(Console.ReadLine());
  16. count = long.Parse(Console.ReadLine());
  17. vah = new long[count];
  18. cen = new long[count];
  19. for (int i = 0; i < count; i++)
  20. {
  21. vah[i] = Reader.Console().Int();
  22. cen[i] = Reader.Console().Int();
  23. }
  24. long d = bag(vah, cen, max);
  25. Console.WriteLine(d);
  26. Console.ReadLine();
  27. }
  28. //сама процедура поиска, vaha - массив весов, ceny массив цен, _max - максимальный вес, который выдерживает рюкзак
  29. //вопрос в том, какая часть массива pl мне не нужна?
  30. static long bag(long[] vaha, long[] ceny, long _max)
  31. {
  32. long n = vaha.Length;
  33. long[,] pl = new long[_max+1, n+1];
  34. for (int j = 1; j <= n; j++)
  35. {
  36. for (int i = 1;i <= _max; i++)
  37. {
  38. if (vaha[j-1] <= i)
  39. {
  40. pl[i, j] = Math.Max(pl[i, j-1], pl[i-vaha[j-1], j-1] + ceny[j-1]);
  41. }
  42. else
  43. {
  44. pl[i, j] = pl[i, j-1];
  45. }
  46. }
  47. }
  48. return pl[_max, n];
  49. }
  50. }
  51. }

Решение задачи: «Задача о ранце. Как сократить память?»

textual
Листинг программы
  1. return prev_pl[_max];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы