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
|
int mat(int i, int j) // recursive algorithm, 모든 경우 계산하므로 계산량이 너무 많음
{
if(i==1 && j==1)
return m[i][j];
else if (i==1)
return mat(1,j-1) + m[i][j];
else if (j==1)
return mat(i-1, 1) + m[i][j];
else
return Math.min(mat(i-1,j), mat(i,j-1))+m[i,j]
}
int mat(int i, int j) // Memoization
{
if (L[i][j] != -1) return L[i][j];
if(i==1 && j==1)
return L[i][j] = m[i][j];
else if (i==1)
return L[i][j] = mat(1,j-1) + m[i][j];
else if (j==1)
return L[i][j] = mat(i-1, 1) + m[i][j];
else
return L[i][j] = Math.min(mat(i-1,j), mat(i,j-1))+m[i,j]
return L[i][j];
}
|