Переделать задачу из Pascal в PHP
ВОт надо было решить задачу http://acm.dvpion.ru/?main=task&id_task=83. Нашёл реализацию на Pascal. Надо переделать на PHP
Срок один день. Жду Ваших предложений.
Приведем функцию, которая проверяет, что два профиля совместимы:
function ok(y, z: byte): boolean;
var
x: byte;
i: integer;
begin
x := y xor z;
{ Развернем двоичное число в массив }
for i := 1 to m do
begin
b := x and 1;
x := x shr 1;
end;
{ Проверим, что нет двух нулей подряд }
for i := 2 to m do
if (b = 0) and (b[i-1] = 0) then
begin
ok := false;
exit;
end;
ok := true;
end;
Теперь ядро программы – заполнение динамически массива A:
{ Находим максимальное значение профиля }
p := 1 shl m - 1;
fillchar(a, sizeof(a), 0);
{ Начальные значения }
for i := 0 to p do
a[1] := 1;
{ Заполнение }
for i := 2 to n do
begin
for j := 0 to p do
for k := 0 to p do
begin
if ok(j, k) then
a[k] := a[i-1][j] + a[k];
end;
end;
{ Подсчет и вывод ответа }
r := 0;
for i := 0 to p do
r := r + a[n];
writeln(r);