aboutsummaryrefslogtreecommitdiff
path: root/0015/main.pas
blob: 2bb5ba13c7f0cfcddbe248be525a59b4619dd4ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
program main;

type
    Row = Array[0..20] of Int64;
    Grid = Array[0..20] of Row;

var
    gridpath: Grid;

procedure init_grid();
var
    i, j: Integer;
begin
    for i := 0 to 20 do
    begin
        for j := 0 to 20 do
            gridpath[i][j] := -1;
    end;
end;

procedure calc(row: Integer; col: Integer);
var
    r, c: Integer;
    ret: Int64;
begin
    ret := 0;
    if gridpath[row][col] <> -1 then
        exit;

    r := row + 1;
    c := col;
    if (r <= 20) and (c <= 20) then
    begin
        calc(r, c);
        ret := ret + gridpath[r][c];
    end;

    r := row;
    c := col + 1;
    if (r <= 20) and (c <= 20) then
    begin
        calc(r, c);
        ret := ret + gridpath[r][c];
    end;
    gridpath[row][col] := ret;
end;

begin
    init_grid();
    gridpath[20][20] := 1;
    calc(0, 0);
    writeLn(gridpath[0][0]);
end.