Найти сумму максимальных значений - C#

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

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

Доброго времени суток. Вот условие задачи: Выставка проходит в зале, разделенном на MxN павильонов. Каждая из 4 стен имеет дверь в соседний павильон (кроме граничных). Каждый павильон раздает посетителям предмет одного вида, выдают только один раз в одни руки. Однако посещать данный павильон можно сколь угодно раз. Путь начинается с (1,1) и состоит и последовательности координат. Необходимо выяснить, на какую максимальную сумму можно набрать предметов в течение К минут, если на посещение одного павильона дается 1 минута. В общем проблема в поиске ближайшего максимального значения, я вроде бы написал проверку, но что-то все равно не так, я уже не знаю как там поменять. Помогите пожалуйста. Вот мои наработки:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace ConsoleApplication1
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. int n, m, i, j, k, max = 0;
  14. Console.WriteLine("Введите n: ");
  15. n = Int32.Parse(Console.ReadLine());
  16. Console.WriteLine("Введите m: ");
  17. m = Int32.Parse(Console.ReadLine());
  18. if ((m == 0 || n == 0) || (m < 0 || n < 0) || (m == 0 && n == 0) || (m < 0 && n < 0))
  19. {
  20. Console.WriteLine("Ошибка, не корректно введено значение!");
  21. }
  22. int[,] mas = new int[n, m];
  23. Console.WriteLine("Вот он, выставочный зал: ");
  24. Random r = new Random();
  25. for (i = 0; i < n; i++)
  26. {
  27. for (j = 0; j < m; j++)
  28. {
  29. mas[i, j] = r.Next(9);
  30. Console.Write(mas[i, j] + "\t");
  31. }
  32. Console.WriteLine();
  33. }
  34. Console.WriteLine();
  35. //for (i = 0; i < n; i++)
  36. //{
  37. // for (j = 0; j < m; j++)
  38. // {
  39. // dubl[i, j] = 0;
  40. // Console.Write(dubl[i, j] + "\t");
  41. // }
  42. // Console.WriteLine();
  43. //}
  44. Console.WriteLine("------------------------------------------------");
  45. Console.WriteLine("Введите количество минут на посещение выставки: ");
  46. k = Int32.Parse(Console.ReadLine());
  47. int p;
  48. int e = 0;
  49. int g = 0;
  50. int h = 0;
  51. int s = 0;
  52. p = mas[0, 0];
  53. for (i = 0; i < 1; i++)
  54. {
  55. for (j = 0; j < k; j++)
  56. {
  57. if (mas[i, j + 1] > mas[i + 1, j])
  58. {
  59. //mas[i, j] = mas[i, j] + mas[i, j + 1];
  60. p += mas[i, j + 1];
  61. }
  62. if (mas[i + 1, j] > mas[i, j + 1])
  63. {
  64. // mas[i, j] = mas[i + 1, j] + mas[i, j];
  65. e += mas[i + 1, j];
  66. }
  67. if ((i >= 1 && j >= 1) || (i >= 1 || j >= 1))
  68. {
  69. if (mas[i - 1, j] > mas[i, j + 1] && mas[i - 1, j] > mas[i + 1, j] && mas[i - 1, j] > mas[i, j - 1])
  70. {
  71. g += mas[i - 1, j];
  72. }
  73. if (mas[i, j - 1] > mas[i, j + 1] && mas[i, j - 1] > mas[i + 1, j] && mas[i, j - 1] > mas[i - 1, j])
  74. {
  75. h += mas[i, j - 1];
  76. }
  77. }
  78. int[] dubl = new int[] { p, e, g, h };
  79. Console.WriteLine();
  80. for (i = 0; i < 3; i++)
  81. Console.Write(dubl[i] + " ");
  82. for (i = 0; i < 3; i++)
  83. {
  84. if (max < dubl[i])
  85. dubl[i] = max;
  86. }
  87. s = max + s;
  88. Console.Write(p + "\t");
  89. }
  90. }
  91. //for (i = 0; i < 1; i++)
  92. //{
  93. // for (j = 0; j < k; j++)
  94. // {
  95. // if (mas[i, j + 1] > mas[i + 1, j])
  96. // {
  97. // //mas[i, j] = mas[i, j] + mas[i, j + 1];
  98. // p+= mas[i, j+1];
  99. // }
  100. // if (mas[i + 1, j] > mas[i, j + 1])
  101. // {
  102. // // mas[i, j] = mas[i + 1, j] + mas[i, j];
  103. // p+= mas[i+1, j];
  104. // }
  105. // if (i>=1 && mas[i - 1, j] > mas[i, j + 1] && mas[i - 1, j] > mas[i + 1, j] && mas[i - 1, j] > mas[i, j - 1])
  106. // {
  107. // p+= mas[i - 1, j];
  108. // }
  109. // if (j >= 1 && mas[i, j-1] > mas[i, j + 1] && mas[i, j-1] > mas[i + 1, j] && mas[i, j-1] > mas[i-1, j])
  110. // {
  111. // p += mas[i, j-1];
  112. // }
  113. // Console.Write(p+ "\t");
  114. // //cur = Max(mas[i + 1, j], mas[i - 1, j], mas[i, j + 1], mas[i, j - 1]) + mas[i, j];
  115. // }
  116. //}
  117. Console.WriteLine("Максимальная сумма составляет: " + s);
  118. //for (i = 0; i < n; i++)
  119. //{
  120. // for (j = 0; j < m; j++)
  121. // {
  122. // Console.Write(mas[i, j] + "\t");
  123. // }
  124. // Console.WriteLine();
  125. //}
  126. Console.ReadKey();
  127. }
  128. //public static int Max(int v1, int v2, int v3, int v4)
  129. //{
  130. // return Math.Max(Math.Max(v1, v2), Math.Max(v3, v4));
  131. //}
  132. }
  133. }
Все, что закомментировано тоже можно использовать, может там что правильное и было.

Решение задачи: «Найти сумму максимальных значений»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8. using System.Numerics;
  9. using System.Diagnostics;
  10. using System.Threading;
  11. using System.Data;
  12.  
  13. namespace ConsoleApplication1
  14. {
  15.     class Program
  16.     {
  17.         static Random rnd = new Random();
  18.         static void Main(string[] args)
  19.         {
  20.             Console.Write("n=");
  21.             int n = int.Parse(Console.ReadLine());
  22.             Console.Write("m=");
  23.             int m = int.Parse(Console.ReadLine());
  24.             int[,] labirinth = new int[n, m];
  25.             for(int i = 0; i < labirinth.GetLength(0); i++)
  26.             {
  27.                 for(int j = 0; j < labirinth.GetLength(1); j++)
  28.                 {
  29.                     labirinth[i, j] = rnd.Next(1, 10);
  30.                     Console.Write(labirinth[i, j] + "  ");
  31.                 }
  32.                 Console.WriteLine();
  33.             }
  34.             Console.Write("t=");
  35.             int t = int.Parse(Console.ReadLine());
  36.  
  37.             Console.WriteLine(MaxSum(labirinth, t));
  38.             Console.ReadKey(true);
  39.         }
  40.         static int MaxSum(int[,] array, int elapsedTime, int x = 0, int y = 0, int sum = 0)
  41.         {
  42.             array = (int[,])array.Clone();
  43.             sum += array[x, y];
  44.             array[x, y] = 0;
  45.             if(--elapsedTime == 0) return sum;
  46.             if(x == 0)
  47.             {
  48.                 if(y == 0) return Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum));
  49.                 if(y == array.GetLength(1) - 1) return Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y-1, sum));
  50.                 return Math.Max(Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum)), MaxSum(array, elapsedTime, x, y-1, sum));
  51.             }
  52.             if(x == array.GetLength(0) - 1)
  53.             {
  54.                 if(y == 0) return Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum));
  55.                 if(y == array.GetLength(1) - 1) return Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x, y-1, sum));
  56.                 return Math.Max(Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum)), MaxSum(array, elapsedTime, x, y-1, sum));
  57.             }
  58.             if(y == 0)
  59.             {
  60.                 return Math.Max(Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum)), MaxSum(array, elapsedTime, x-1, y, sum));
  61.             }
  62.             if(y == array.GetLength(0) - 1)
  63.             {
  64.                 return Math.Max(Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x+1, y, sum)), MaxSum(array, elapsedTime, x, y-1, sum));
  65.             }
  66.             return Math.Max(Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum)), Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x, y-1, sum)));
  67.         }
  68.     }
  69. }

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


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

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

15   голосов , оценка 4.267 из 5

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

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

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