我 太 弱 了
fi,j 当前已经考虑了前 i 个字符,最末尾有 j 个字符与串 b 相同,最少需要修改多少个字符。
#include <cstdio>
#include <cstring>
char a[10001], b[1001];
int f[2][1001];
inline int min(int x, int y) {return x < y ? x : y;}
int main() {
scanf("%s%s", a + 1, b + 1);
int n(strlen(a + 1)), m(strlen(b + 1)), ans(0x7fffffff);
memset(f[0], 0x3f, sizeof f[0]), f[0][0] = 0;
for (int i(1); i <= n; ++ i) {
int t(i & 1), t2(i - 1 & 1);
memset(f[t], 0x3f, sizeof f[t]);
f[t][0] = f[t2][0];
for (int j(1); j <= min(m - 1, i); ++ j) {
f[t][j] = (a[i] == b[j] ? f[t2][j - 1] : f[t2][j - 1] + 1);
f[t][0] = min(f[t][0], f[t2][j]);
}
f[t][0] += a[i] == b[1];
}
for (int i(0); i < m; ++ i) ans = min(ans, f[n & 1][i]);
printf("%d", ans);
}