Найти сумму максимальных значений - 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)));
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д