LCS算法和背包问题
1.问题
2.解析
LCS算法:
背包问题:
3.设计
核心代码实现:
LCS算法:
int main() {
string a, b;
getline(cin, a);
getline(cin, b);
for (int i = 1; i <= a.length(); i++) {
for (int j = 1; j <= b.length(); j++) {
if (a[i - 1] == b[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
cout << dp[a.length()][b.length()] << endl;
return 0;
}
例题
背包问题:
int knapSack(int W, int wt[], int val[], int n)
{
int i, w;
int K[n+1][W+1];
for (i = 0; i <= n; i++)
{
for (w = 0; w <= W; w++)
{
if (i==0 || w==0)
K[i][w] = 0;
else if (wt[i-1] <= w)
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]);
else
K[i][w] = K[i-1][w];
}
}
return K[n][W];
}
例题
4.分析
LCS算法时间复杂度:O(mn)
背包问题时间复杂度:O(mn)