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];
先确定动态规划的状态,拿字符串的最后一项作为他的状态。
任意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];
相关文章推荐
- UVA 10635 Prince and Princess (LCS优化转LIS)
- 最长公共子序列(LCS)和最长递增子序列(LIS)的求解
- BZOJ 1264 基因匹配Match(LCS转化LIS)
- hdu 5087 Revenge of LIS II lcs变形
- UVa10635 Prince and Princess ACM解题报告(LCS与LIS的转化+单调栈+二分查找代替DP)
- [DP]LIS+LCS+最大连续子段和
- 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
- LIS、LCS 小结
- 【动态规划基础篇】【矩阵取数/最大字段和/最长公共子序列(LCS)/编辑距离/最长上升子序列(LIS)】
- UVA 10635 Prince and Princess【LCS 问题转换为 LIS】
- vijos1264 lcs+ lis
- 最长上升子序列问题(LIS)和最长公共子序列问题(LCS)
- LCS && LIS
- 寒假训练报告1.30(LIS和LCS转换)
- LIS(最长的序列)和LCS(最长公共子)总结
- UVa10635--Prince and Princess(LCS转LIS)
- nyoj See LCS again 760 (LCS&&LIS) 好题
- uva-10635 Prince and Princess LCS转化为LIS
- UVA 10635 Prince and Princess【LCS 问题转换为 LIS】
- LIS && LCS && LCIS