Найти сумму максимальных значений - 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)));
        }
    }
}

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


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

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

15   голосов , оценка 4.267 из 5
Похожие ответы