Найти сумму максимальных значений - C#
Формулировка задачи:
Доброго времени суток. Вот условие задачи: Выставка проходит в зале, разделенном на MxN павильонов. Каждая из 4 стен имеет дверь в соседний павильон (кроме граничных). Каждый павильон раздает посетителям предмет одного вида, выдают только один раз в одни руки. Однако посещать данный павильон можно сколь угодно раз. Путь начинается с (1,1) и состоит и последовательности координат. Необходимо выяснить, на какую максимальную сумму можно набрать предметов в течение К минут, если на посещение одного павильона дается 1 минута.
В общем проблема в поиске ближайшего максимального значения, я вроде бы написал проверку, но что-то все равно не так, я уже не знаю как там поменять. Помогите пожалуйста.
Вот мои наработки:
Все, что закомментировано тоже можно использовать, может там что правильное и было.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int n, m, i, j, k, max = 0; Console.WriteLine("Введите n: "); n = Int32.Parse(Console.ReadLine()); Console.WriteLine("Введите m: "); m = Int32.Parse(Console.ReadLine()); if ((m == 0 || n == 0) || (m < 0 || n < 0) || (m == 0 && n == 0) || (m < 0 && n < 0)) { Console.WriteLine("Ошибка, не корректно введено значение!"); } int[,] mas = new int[n, m]; Console.WriteLine("Вот он, выставочный зал: "); Random r = new Random(); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { mas[i, j] = r.Next(9); Console.Write(mas[i, j] + "\t"); } Console.WriteLine(); } Console.WriteLine(); //for (i = 0; i < n; i++) //{ // for (j = 0; j < m; j++) // { // dubl[i, j] = 0; // Console.Write(dubl[i, j] + "\t"); // } // Console.WriteLine(); //} Console.WriteLine("------------------------------------------------"); Console.WriteLine("Введите количество минут на посещение выставки: "); k = Int32.Parse(Console.ReadLine()); int p; int e = 0; int g = 0; int h = 0; int s = 0; p = mas[0, 0]; for (i = 0; i < 1; i++) { for (j = 0; j < k; j++) { if (mas[i, j + 1] > mas[i + 1, j]) { //mas[i, j] = mas[i, j] + mas[i, j + 1]; p += mas[i, j + 1]; } if (mas[i + 1, j] > mas[i, j + 1]) { // mas[i, j] = mas[i + 1, j] + mas[i, j]; e += mas[i + 1, j]; } if ((i >= 1 && j >= 1) || (i >= 1 || j >= 1)) { 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]) { g += mas[i - 1, j]; } 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]) { h += mas[i, j - 1]; } } int[] dubl = new int[] { p, e, g, h }; Console.WriteLine(); for (i = 0; i < 3; i++) Console.Write(dubl[i] + " "); for (i = 0; i < 3; i++) { if (max < dubl[i]) dubl[i] = max; } s = max + s; Console.Write(p + "\t"); } } //for (i = 0; i < 1; i++) //{ // for (j = 0; j < k; j++) // { // if (mas[i, j + 1] > mas[i + 1, j]) // { // //mas[i, j] = mas[i, j] + mas[i, j + 1]; // p+= mas[i, j+1]; // } // if (mas[i + 1, j] > mas[i, j + 1]) // { // // mas[i, j] = mas[i + 1, j] + mas[i, j]; // p+= mas[i+1, j]; // } // 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]) // { // p+= mas[i - 1, j]; // } // 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]) // { // p += mas[i, j-1]; // } // Console.Write(p+ "\t"); // //cur = Max(mas[i + 1, j], mas[i - 1, j], mas[i, j + 1], mas[i, j - 1]) + mas[i, j]; // } //} Console.WriteLine("Максимальная сумма составляет: " + s); //for (i = 0; i < n; i++) //{ // for (j = 0; j < m; j++) // { // Console.Write(mas[i, j] + "\t"); // } // Console.WriteLine(); //} Console.ReadKey(); } //public static int Max(int v1, int v2, int v3, int v4) //{ // return Math.Max(Math.Max(v1, v2), Math.Max(v3, v4)); //} } }
Решение задачи: «Найти сумму максимальных значений»
textual
Листинг программы
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Numerics; using System.Diagnostics; using System.Threading; using System.Data; namespace ConsoleApplication1 { class Program { static Random rnd = new Random(); static void Main(string[] args) { Console.Write("n="); int n = int.Parse(Console.ReadLine()); Console.Write("m="); int m = int.Parse(Console.ReadLine()); int[,] labirinth = new int[n, m]; for(int i = 0; i < labirinth.GetLength(0); i++) { for(int j = 0; j < labirinth.GetLength(1); j++) { labirinth[i, j] = rnd.Next(1, 10); Console.Write(labirinth[i, j] + " "); } Console.WriteLine(); } Console.Write("t="); int t = int.Parse(Console.ReadLine()); Console.WriteLine(MaxSum(labirinth, t)); Console.ReadKey(true); } static int MaxSum(int[,] array, int elapsedTime, int x = 0, int y = 0, int sum = 0) { array = (int[,])array.Clone(); sum += array[x, y]; array[x, y] = 0; if(--elapsedTime == 0) return sum; if(x == 0) { if(y == 0) return Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum)); if(y == array.GetLength(1) - 1) return Math.Max(MaxSum(array, elapsedTime, x+1, y, sum), MaxSum(array, elapsedTime, x, y-1, sum)); 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)); } if(x == array.GetLength(0) - 1) { if(y == 0) return Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x, y+1, sum)); if(y == array.GetLength(1) - 1) return Math.Max(MaxSum(array, elapsedTime, x-1, y, sum), MaxSum(array, elapsedTime, x, y-1, sum)); 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)); } if(y == 0) { 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)); } if(y == array.GetLength(0) - 1) { 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)); } 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))); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д