タイトル説明
「ABCDE」$、文字列$ B:「jcdkl」$、次いでその最長共通サブストリング$「CD」$、最長文字列の長さ、すなわち、そのような文字列$ Aいわゆる最長の共通部分、そして2つの文字列が連続した部分文字列として登場しています。
与えられた2は簡単なことではありません彼らの最長共通文字列を求めて、文字列の長さのRNR、マスターあなたのための文字列です。
だから今、あなたは、あなたが任意の文字にそれを編集し、文字列の場所を選択することができますたびに、$ K $回を修正する機会を持っています。
この後には、最長共通文字列は最長で2つの文字列を変更し、合理的な$ kの$リビジョンチャンスを使用する必要があります。私はあなたが文字列のマスターであることを信じて、この問題はまた、あなたを破りました。
入力形式
最初の行は、修正文字列の長さと数を表す2つの整数$ N、K $を、含んでいます。
二行目は、小文字からなるN- $ $ $ S $の文字列の長さを含みます。
第三のラインは、小文字からなるN- $ $ $ T $の文字列の長さを含みます。
出力フォーマット
出力線整数、すなわち変形後の二つの文字列は、最長共通部分の長さを完成します。
サンプル
サンプル入力1:
5 0
ABCDE
jcdkl
出力例1:
2
サンプル入力2:
5 2
AAAAAの
アベバ
サンプル出力2:
5
データ範囲とヒント
$ \ 100%の$データ、$ 0 \ leqslant K \ leqslantのn $のために。
問題の解決策
レア水の問題が、私は遊びに行ってきましたので、テストしていませんでした......
......、少し難しいことではありません、タイトルを見に戻ってくるマッド
それから私は......まあ**問題ではないデータの範囲を、読んで
だから、$ 5 $分カット。
そして、私は多くの人が$ DP $をプレイしている知っている、実際には、暴力をすることができます。
何の変更を知らないか、これまでに終わりに近づいて、私たちは機会を一致していないいくつかの変更を使用しても良い時間に接続する必要がありますので、我々は二つの文字列の開始点を列挙することができ、その後、少しずつ比較する、過ごし置くために同じ機会ではありません。
物語は、$ skyh $ $ $ DPと呼ばれるこの質問を参照して、キック、に対する暴力についての映画を作りたいが、時間の複雑さが同じである見つけ、それは非常に恥ずかしいです、話を終えた......
だから、複雑な簡単な質問を見たいと思っていません。
時間の複雑さ:$ \シータ(N ^ 3)$。
期待はスコア:$ $ 100ポイントを。
実際のスコア:$ $ 100ポイント。
コードの時間
#include<bits/stdc++.h>
using namespace std;
int n,k;
char S[301],T[301];
int l,r,sum;
int ans;
int main()
{
scanf("%d%d%s%s",&n,&k,S+1,T+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
l=i;
r=j;
sum=0;
while(l&&r&&sum<=k)
{
if(S[l]!=T[r])sum++;
l--;
r--;
}
if(sum>k)ans=max(ans,i-l-1);
else ans=max(ans,i-l);
}
printf("%d",ans);
return 0;
}
rp++