您的位置:首页 > 其它

LIS_LCS-计蒜课

2018-03-19 11:55 176 查看
一、LIS最长上升子序列
先确定动态规划的状态,拿字符串的最后一项作为他的状态。
任意j<i,a[j]<[i],dp[i]= max(dp[j]+1,dp[i])
附:主要逻辑代码:
memset(dp,0,sizeof(dp))
for(int i=1;i<n;i++){
ans = dp[1];
dp[i]=1;
for(int j=1;j<i;j++){
if(a[i]>a[j]){
dp[i]=max(dp[j]+1,dp[i])
}
}
ans=max(ans,dp[i]);
}二、LCS最长公共子序列
用dp[i][j]来表示前i和前j个字符的最长公共子序列。
如果s1[i]==s2[j]则dp[i
否则dp[i][j]=max(dp[i-1][j],dp[i][j-1])memset(dp,0,sizeof(dp))
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
if(s1[i]=s2[j]){
dp[i][j]=dp[j-1][i-1]+1;
}
else dp[i][j]=dp[j][i-1]+dp[j-1][i];
}
}
cout<<dp
[m];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: