![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое програмирование. Подпалендром. [D7, WinXP]
rodion © (2010-05-07 07:30:00)
Страницы: < 1 2 ... 5 6 7 8 9 10 11 12 13 14
Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево. Подпалиндромом данной строки называется последовательность символов из данной строки, не обязательно идущих подряд, являющаяся палиндромом. Например, 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]мпожно перевернуть строку и искать общую подпоследовательность максимальной длины с перехлестом не более, чем на один символ