1.问题
LSC:求两串最长相同的子串
0/1背包:V体积的背包,有N个物品 ,每个物品都有自己的体积和重量,问该背包能装 的最大 质量。
2.解析
LCS:
背包:
3.设计
//lsc算法
for(i=1;i<=lena;++i){
for(j=1;j<=lenb;++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]);
}
}
//背包算法
for(int i=0;i<n;i++){ //滚动数组优化
for(int j=m;j>=0;j–){
if(j>=w[i]){
dp[j]=max(dp[j],(dp[j-w[i]]+v[i]));
}
}
}
4.分析
LCS时间复杂度:O(MN),两个字符串长度相乘;
背包问题时间复杂度:O(NM),个数和容量相乘;
5.源码
[github源码地址]
https://github.com/Windycat0/-/blob/main/LCS%E5%92%8C%E8%83%8C%E5%8C%85%E7%AE%97%E6%B3%95