【发布时间】:2015-07-04 12:53:20
【问题描述】:
我是一个新手,试图将我的头脑包裹在动态编程上,这对我来说似乎是一个谜。我正在查看使用 DP 的最长常见子字符串问题的解决方案。它的代码如下:-
int dp[N+1][N+1];
for (int i = 0; i <= N; ++i)
dp[0][i] = dp[i][0] = 0;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= N; ++j) {
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
if (A[i-1] == B[j-1])
dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1);
}
int answer = dp[N][N];
它的解决方案看起来很简单,但我很难理解解决方案。谁能解释一下代码中发生了什么以及这如何解决 LCS 问题?
【问题讨论】: