//
function decToX(x:integer;k:integer):string;
// конвертирует x из десятичной системы счисления в систему счисления по основанию k (до 16-ричной, но можно расширить до какой угодно).
var s:string='';
t:string='';
i:integer;
begin
while x>0 do begin
i := x mod k;
if i = 10 then t:='A'
else if i = 11 then t:='B'
else if i = 12 then t:='C'
else if i = 13 then t:='D'
else if i = 14 then t:='E'
else if i = 15 then t:='F'
else str(i, t);
s:=t+s;
x:=x div k;
end;
decToX := s;
end;
//
function xToDec(x:string; k:integer):integer;
// конвертирует x из системы счисления по основанию k (до 16-ричной) в десятичную
var s:string='';
i,j,l:integer;
begin
i:=length(x);
l:=0;
while i>0 do begin
case x[i] of
'0','1','2','3','4','5','6','7','8','9': val(x[i],j);
'A': j:=10;
'B': j:=11;
'C': j:=12;
'D': j:=13;
'E': j:=14;
'F': j:=15;
end;
l:=l+round(j*exp((length(x)-i)*ln(k)));
i:=i-1;
end;
xToDec := l;
end;
//
var sbin:string;
// тело программы
// здесь мы вводим строку с двоичным кодом, далее конвертируем его в десятичную систему счисления, а после переводим в 14-ричную
begin
write('Введите двоичное число: '); readln(sbin);
writeln(decToX(xToDec(sbin,2),14));
end.
Объяснение:
Я написал универсальные функции перевода из любой системы счисления в десятичную и наоборот. Они расширяемые, так что можно не ограничиваться 16-ричной системой счисления.
Может быть написано чуть больше, чем необходимо, зато универсально :)
Так как речь идет о таблице, то лучше перебрать рекурсивно. Логично, что количество путей для клетки (i,j) - это количество путей для правой соседней клетки + количество путей для нижней соседней клетки.
При таком условии мы будем посещать те же клетки слишком часто, однако значение для них меняться не будет. Имеет смысл вычислить их единожды и запомнить для последующих использований. (На самом деле, достаточно иметь буфер вместимостью всего в 6 элементов, но мы сделаем полное запоминание).
(Иллюстрация 3 - таблица кэша)
Иллюстрации кода и возможного вывода прикреплены в дополнительных материалах.
========================
Ваши оценки и отзывы позволяют лучше оценить качество ответа.
Если ответ удовлетворил, не забудь отметить его как "Лучший".
Успехов в учёбе!
========================
Код:
cache = {}
def calculate_max_way_price(x: int, y: int, m:int, n:int):
if (x, y) in cache:
return cache[(x, y)]
x_way, y_way = 0, 0
if x < m - 1:
x_way = calculate_max_way_price(x + 1, y, m, n)
if y < n - 1:
y_way = calculate_max_way_price(x, y + 1, m, n)
if x == m - 1 and y == n - 1:
cache[(x, y)] = 1
return 1
cache[(x, y)] = x_way + y_way
return x_way + y_way
N = int(input())
M = int(input())
print(calculate_max_way_price(0, 0, N, M))
100001(2)=1*2^5+0*2^4+0*2^3+0*2^2+0*2^1+1*2^0=32+0+0+0+0+1=33(10)