Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое програмирование. Подпалендром. [D7, WinXP]


Страницы:   1 2 ... 5 6 7 8 9 10 11 12 13 14

rodion ©   (2010-05-07 07:30:00) 

Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево. Подпалиндромом данной строки называется последовательность символов из данной строки, не обязательно идущих подряд, являющаяся палиндромом. Например, HELOLEH является подпалиндромом строки HTEOLFEOLEH. Напишите программу, находящую в данной строке подпалиндром максимальной длины.

есть код задачи, который нужно исправить, для правильной работы:

program Project6;

{$APPTYPE CONSOLE}

uses
SysUtils;
var
Mat:array[1..100,1..100]of integer;
s:string;
s1:string;
i,j,n,d,j1,k,maxj,maxi:integer;

Function F(i, j : Integer) : Integer;
var Ch : Char; R1, R2 : Integer; k : byte;
begin
if Mat[i, j] = -1 then
BEGIN
k := j;
while s[i] <> s[k] do dec(k);
R1 := F(i + 1, j);
if i <> k then R2 := F(i + 1, k - 1) + 2 else R2 := 1;
if R1 > R2 then Mat[i, j] := R1 else Mat[i, j] := R2
END;
F := Mat[i, j]
end;

begin
try
{ TODO -oUser -cConsole Main : Insert code here }
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
readln(s);
for I:=1 to length(s) do
for j := 1 to length(s) do
if i=j then Mat[i,j]:=1
else if i>j then Mat[i,j]:=0
else mat[i,j]:=-1;
maxi:=0;maxj:=0;
for i:=1 to length(s) do
for j:=1 to length(s) do
begin
Mat[i,j]:=f(i,j);
if (j-i+1>maxj-maxi+1)and(j-i+1=Mat[i,j]) then
begin
maxi:=i;
maxj:=j;
end;
end;
writeln(maxj-maxi+1);
writeln(copy(s,maxi,maxj-maxi+1));
readln;
end.

Заранее спасибо!


rodion   (2010-05-07 16:50:00) [261]

-
> Имеешь отформатированный отлаженный код для стандартной
> задачи?

я в задаче разобрался, проблема в том что реализовать не могу, вот и прошу помощи у вас. поможете или нет?(


Б   (2010-05-07 13:42:00) [262]

За деньгу в сети всегда решат.


Anatoly Podgoretsky   (2010-05-07 13:33:00) [263]

> rodion  (07.05.2010 11:01:05)  [5]

Ну время приобрести зачет еще есть, ты посмотри местные объявления, наверняка кто то торгует этим.


Sha   (2010-05-07 13:19:00) [264]

> с января парюсь надо этой задачой

Значит наибольшую общую подпоследоватьность двух последоватьностей
без всякой палиндромности находить уже умеешь?

Имеешь отформатированный отлаженный код для стандартной задачи?


Palladin   (2010-05-07 13:17:00) [265]

ну не нужны стране такие космонавты


rodion   (2010-05-07 13:13:00) [266]

> народ помогите кто чем может, 17 мая меня отчисляют если
> не сдам

в 17 мая переместить?

17 отчислят если не сдам во вторник крайний срок..

что на счет кода, согласен что мусор, ну я фиг знает как и написать ваще.
с января парюсь надо этой задачой. я б перебором бы сделал, а нельзя. а как динамическим прогромированием ее решать я ваще не понимаю. такие дела


Rouse_   (2010-05-07 11:43:00) [267]

зы: резюме местного it отдела - "код уныл" :)


Rouse_   (2010-05-07 11:40:00) [268]

Если придет Ега до 18 нуль-нуль, то будем карать... Не отвлекайте человека - ему код писать нужно :)


12   (2010-05-07 11:29:00) [269]

автору. Пока примерно так не будет - вряд ли чего дождешься.

 
// назначение: выбить из матрицы элементы по принципу левой ноги в кастрюле
 Function F(i, j : Integer) : Integer;
 var
   Ch : Char;
   R1, R2 : Integer;
   k : byte;
 begin
   if Mat[i, j] = -1 then
   BEGIN
     k := j;
     while s[i] <> s[k] do dec(k);
     R1 := F(i + 1, j);
     if i <> k
      then R2 := F(i + 1, k - 1) + 2
      else R2 := 1;

// пока не понял, стоит ли принцип стакана применить.
// Поставил заглушку. Подскажите как быть
     if R1 > R2
      then Mat[i, j] := R1
      else Mat[i, j] := R2;

    END;
    F := Mat[i, j]
 end; // Function


12   (2010-05-07 11:26:00) [270]

не, Ега сайт призывник ру знает как точно пишется :)


Плохиш   (2010-05-07 11:15:00) [271]


> Вообщем, ща Ега придет и скажет чего делать

А, вот кто по пятницам подаёт :-))

PS. Что-то давно не видно всяких защитников немощных и обездоленных...


12   (2010-05-07 11:12:00) [272]

код - каша
прямое не уважение к людям
ты думаешь кто-то будет тратить время на разбор, если тебе лень было потратить минутку на форматирование и комментарии?

Вообщем, ща Ега придет и скажет чего делать :)


Плохиш   (2010-05-07 11:09:00) [273]


> народ помогите кто чем может, 17 мая меня отчисляют если
> не сдам

в 17 мая переместить?


rodion   (2010-05-07 11:01:00) [274]

это можно удалить, это автоматом написалось...

вобщем люди, щас только с зачета, завалил..
препод сказал, что функцию ваще как бэ не нужна ибо там есть рекурсия
if i <> k then R2 := F(i + 1, k - 1) + 2 else R2 := 1;
if R1 > R2 then Mat[i, j] := R1 else Mat[i, j] := R2
надо ее засунуть когда уже будет сформирован массив, вобщем что то в этом духе...а потом я, как сказал Игорь Шевченко, вылетел с треском..
народ помогите кто чем может, 17 мая меня отчисляют если не сдам(
такие дела..


Игорь Шевченко   (2010-05-07 10:25:00) [275]


> try
> { TODO -oUser -cConsole Main : Insert code here }
> except
> on E:Exception do
> Writeln(E.Classname, ': ', E.Message);
> end;


ты откуда код списал, дубинушко ? Я бы только за это выгнал бы с треском


12   (2010-05-07 08:26:00) [276]


> try
> { TODO -oUser -cConsole Main : Insert code here }
> except
> on E:Exception do
> Writeln(E.Classname, ': ', E.Message);
> end;

сильно


xayam   (2010-05-07 08:21:00) [277]

не обязательно идущих подряд? это больше анаграмма, чем полиндром. И это... код можно прокомментировать


MBo   (2010-05-07 07:56:00) [278]

мпожно перевернуть строку и искать общую подпоследовательность максимальной длины с перехлестом не более, чем на один символ


Страницы:   1 2 ... 5 6 7 8 9 10 11 12 13 14

Наверх

Титульная страница Поиск, карта сайта Написать письмо