最长公共子序列

来源:互联网 发布:java 替换特殊字符 编辑:程序博客网 时间:2024/06/16 02:31


O(n²)的suanfa

#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>using namespace std;int main(){    char x[505],y[505];    int sum[505][505],i,j,len1,len2;    while(gets(x))    {        gets(y);        len1=strlen(x);        len2=strlen(y);        memset(sum,0,sizeof(sum));        for(i=1;i<=len1;i++)        {            for(j=1;j<=len2;j++)            {                if(x[i-1]==y[j-1])                sum[i][j]=sum[i-1][j-1]+1;                else                   sum[i][j]=max(sum[i-1][j],sum[i][j-1]);            }        }        printf("%d\n",sum[len1][len2]);    }    return 0;}

O(nlogn)的算法。


感觉楼主说的很对,就直接贴过来了。



#include <iostream>using namespace std;int BinSeach(int &item, int *a, int left, int right){    while (left<right)    {        int mid = (left + right) / 2;        if (item > a[mid] && item <= a[mid + 1])            return mid;        else if (item < a[mid])            right = mid - 1;        else            left = mid + 1;    }   }int main(){    int a[] = { 1, 7, 3, 5, 9, 4, 8 };    int n = sizeof(a) / sizeof(int);    int b[sizeof(a) / sizeof(int)];    b[0] = a[0];    int len = 1;    int j = 0;    for (int i = 1; i < n;i++)    {        if (a[i]>b[len - 1])            j = len++;        else            j = BinSeach(a[i], b, 0, len - 1)+1;        b[j] = a[i];    }    cout << len << endl;    for (int i = 0; i < len;i++)    {        cout << b[i] << " ";    }    return 0;}


这个是求出最大公共子串的和的点击打开链接

#include <stdio.h>int N;int data[1001];int dp[1001];int MIS(){    int i, j;    int max;    for (i = 1; i <= N; ++i){        dp[i] = data[i];        for (j = 1; j < i; ++j){            if (data[i] > data[j] && dp[i] < dp[j] + data[i]){                dp[i] = dp[j] + data[i];            }        }    }    max = -1;    for (i = 1; i <= N; ++i){        if (max < dp[i])            max = dp[i];    }    return max;}int main(void){    int i;    while (scanf("%d", &N) != EOF){        for (i = 1; i <= N; ++i){            scanf("%d", &data[i]);        }        printf("%d\n", MIS());    }    return 0;}



0 0
原创粉丝点击