Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Помогите написать программу для определения оптимального пути (возможно псевдокод)

Ответить
Настройки темы
Java - Помогите написать программу для определения оптимального пути (возможно псевдокод)

Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Условие:
План прямоугольного сада размером MxN состоит из квадратных зон. В каждой зоне растёт по дереву. С каждого дерева любой зоны могут упасть несколько яблок.
В левом верхнем квадратике находится ёжик, который должен дойти до правого нижнего квадратика. В саду существуют ограничения относительно способа передвижения: ёжик может двигаться из текущего квадратика только в один из двух соседних правый либо нижний.
Составьте программу, которая вычисляет максимальное количество яблок, которое может собрать ёжик, передвигаясь к нужному квадратику.

Технические условия:
План сада задан таблицей apples содержащей m строк и n столбиков. Элемент apples[i,j] таблицы указывает количество яблок, упавших с дерева в зону с координатами i,j.
Текстовый файл input.txt содержит в первой строке числа M,N разделённые пробелом. В каждой из следующих m строк содержится по n чисел apples[i,j] разделённых пробелами.
Файл output.txt должен содержать одно натуральное число.

Примеры файлов:
Input.txt Output.txt
3 3
1 2 3
1 2 3
1 2 3 12

Отправлено: 00:23, 22-11-2013

 

Ветеран


Сообщения: 1658
Благодарности: 146

Профиль | Отправить PM | Цитировать


Боюсь, что в реале ёжик рано или поздно долбанется башкой о ствол яблони, положение которого не учтено в условии...

Отправлено: 12:10, 22-11-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


Что-то такое?
Код: Выделить весь код
#include <stdio.h>

int n=3, m=3;
int a[][3] = {
 {1, 2, 3},
 {1, 2, 3},
 {1, 2, 3}
};

int MaxApples(i0,j0){
  int i, i1, max=0, max0, sum=0;
  if( j0 >= m ) {
    for(i=i0;i<=n;i++) sum+=a[i-1][m-1];
    return sum;
  } else {
    for(i1=i0;i1<=n;i1++){
      sum=0;
      for(i=i0;i<=i1;i++) sum+=a[i-1][j0-1];
      max0=sum+MaxApples(i1,j0+1);
      if( max0 > max ) max=max0;
     }
   return max;
  }
}

int main(){
  printf("Maximum number of apples = %d\n", MaxApples(1,1));
}

(Чтение файла я не делал - только рекурсию)

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.


Последний раз редактировалось AMDBulldozer, 22-11-2013 в 12:50.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:23, 22-11-2013 | #3


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


почему не получается инициализировать массив следующим образом:
int[][] apples = new int[4][] { { 3, 3 }, { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

Отправлено: 12:42, 22-11-2013 | #4


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


nastr, потому что то, что Вы написали, это вообще не массив.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.


Отправлено: 12:49, 22-11-2013 | #5


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата AMDBulldozer:
AMDBulldozer »
Огромное спасибо, то что нужно!
Я модифицировал под C#:
Код: Выделить весь код
int n = 3, m = 3;
        int[,] apple = new int[3,3] { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

        int MaxApples(int i0, int j0)
        {
            int i, i1, max = 0, max0, sum = 0;
            if (j0 >= m)
            {
                for (i = i0; i <= n; i++)
                    sum += apple[i - 1, m - 1];
                return sum;
            }
            else
            {
                for (i1 = i0; i1 <= n; i1++)
                {
                    sum = 0;
                    for (i = i0; i <= i1; i++)
                        sum += apple[i - 1, j0 - 1];
                    max0 = sum + MaxApples(i1, j0 + 1);
                    if (max0 > max) max = max0;
                }
                return max;
            }
        }

Последний раз редактировалось Delirium, 22-11-2013 в 15:50.


Отправлено: 13:47, 22-11-2013 | #6

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Типовая задача динамического программирования, решается за один проход M*N (рекурсия не нужна).
http://ru.wikipedia.org/wiki/%D0%94%...BD%D0%B8%D0%B5

очень походит на нечёткое сравнение
http://habrahabr.ru/post/114997/

Отправлено: 10:36, 25-11-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Помогите написать программу для определения оптимального пути (возможно псевдокод)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] C++ помогите написать программу Hatalllka1 Программирование и базы данных 11 04-02-2014 17:02
C/C++ - [решено] Помогите написать программу на с++ для перевода чисел из системы счисления vanek48ru Программирование и базы данных 8 28-02-2013 17:51
C/C++ - помогите написать программу!!!!!! unkown5219362 Программирование и базы данных 2 17-01-2013 17:08
Любой язык - Команда для определения пути установленной программы и последующая распаковка архива MadMaks Скриптовые языки администрирования Windows 3 02-11-2012 15:39
Delphi - Помогите написать программу для поиска суммы двух знаком двухзначного числа. highlander5 Программирование и базы данных 6 28-01-2011 12:38




 
Переход