动态规划——单调递增最长子序列

来源:互联网 发布:迅雷7优化版 编辑:程序博客网 时间:2024/06/07 22:25

妙:

把输入序列非递减排序,然后求这两个序列的最长公共子串LCS

#include<iostream>#include<algorithm>using namespace std;int c[10000][10000];void LCS(int m, int *a, int *b){//m是两个数组长度,数组从下标为1开始 int i, j;for(i=1; i<=m; i++){c[i][0] = 0;}for(i=1; i<=m; i++){c[0][i] = 0;}//把下标有0的先初始化为0 for(i=1; i<=m; i++){for(j=1; j<=m ; j++){if(a[i] == b[j]){c[i][j] = c[i-1][j-1] + 1;}else if(c[i-1][j] >= c[i][j-1]){c[i][j] = c[i-1][j];}else{c[i][j] = c[i][j-1];}}}}int main(){int n;int a[10000];int b[10000];cin>>n;for(int i=1; i<=n; i++){cin>>a[i];b[i]=a[i];}sort(b+1,b+n+1);/*for(int i=1; i<=n; i++){cout<<b[i];}*/LCS(n, a, b);cout<<c[n][n];} 


原创粉丝点击