最長共通部分列問題解決

タイトル説明は
二つの文字列、B、従来の与えられたk個の最長共通部分が2つの最長の文字列を変更だから、文字列内の文字を修正する機会を。
それぞれの変更は、文字列B内の任意の位置に任意の文字列を変更し、選択することができます。

入力フォーマット:
最初の行は、正の整数kを含みます。
2行目と3行目、それぞれの入力文字列A、B。(各文字列の長さは500を超えません)

出力形式:
出力は、修正二つの文字列の最長共通部分の長さを表す整数です。

ソリューションの概要
暴力:二重サイクルを使用して、異なる開始位置に、B列を選択し、k番目の得られた最終結果を比較した後、文字列の二つの文字列の最長共通部分列の長さの変形最大値を算出します。

完全なコード

#include<stdio.h>
#include<string.h>

int main()
{
    int k, n1, n2, ans = 0, count, i, j, p, q;
    char a[505], b[505];
    scanf("%d", &k);
    getchar();
    gets(a);
    gets(b);
    n1 = strlen(a);
    n2 = strlen(b);

    for (i = 0; i < n1; i++) {
        for (j = 0; j < n2; j++) {
            p = i;
            q = j;
            count = 0;
            while (count != k && p != n1 && q != n2) {
                if (a[p] != b[q]) {
                    count++;
                }
                p++;
                q++;
            }
            if (p - i > ans) {
                ans = p - i;
            }
        }
    }
    printf("%d", ans);
    return 0;
}

おすすめ

転載: www.cnblogs.com/dump16/p/12409981.html