如何解释代码第十六到二十三行的初始化的必要性?
#include <bits/stdc++.h>
using namespace std;
const int N = 2007;
int n , m;
char a[N] , b[N];
int f[N][N];
int main(){
scanf("%s" , a + 1);
scanf("%s" , b + 1);
n = strlen(a + 1) , m = strlen(b + 1);
for(int i = 0 ; i <= m ; i ++)
{
f[0][i] = i;
}
for(int i = 0 ; i <= n ; i ++)
{
f[i][0] = i;
}
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= m ; j ++)
{
f[i][j] = min(f[i - 1][j] + 1 , f[i][j - 1] + 1);
if(a[i] == b[j])
{
f[i][j] = min(f[i][j] , f[i - 1][j - 1]);
}
else
{
f[i][j] = min(f[i][j] , f[i - 1][j - 1] + 1);
}
}
cout << f[n][m] << "\n";
return 0;
}