最长公共上升子序列 LCIS
/// LCIS 最长公共上升子序列
namespace LCIS
{
const int MAXLEN_A = 500;
const int MAXLEN_B = 500;
int dp[MAXLEN_A+5][MAXLEN_B+5];
int deal(const char* a,const char* b)
{
int lena=strlen(a);
int lenb=strlen(b);
for(int i=1;i<=lenb;i++)
{
int k=0;
for(int j=1;j<=lena;j++)
{
dp[i][j]=dp[i-1][j];/// when b[i-1] != a[j-1]
if(b[i-1]>a[j-1]) k=max(k,dp[i-1][j]);
else if(b[i-1]==a[j-1]) dp[i][j]=k+1;
}
}
int ans=0;
for(int i=1;i<=lena;i++) ans=max(ans,dp[lenb][i]);
return ans;
}
}
//End of namespace LCIS
最长公共上升子序列算法
本文介绍了一种求解最长公共上升子序列(LCIS)的算法实现,该算法通过动态规划的方式找到两个序列中最长的公共且递增的子序列。文章详细展示了算法的具体实现过程,包括初始化二维动态规划数组dp,以及通过两层循环更新dp数组来求解最终答案。
1263

被折叠的 条评论
为什么被折叠?



