luoguP2268 [HNOI2002] DNA分子的最佳比对
思路
简单的最长公共子序列。状态转移方程是:\(f[i][j]=max(f[i-1][j]-2,max(f[i][j-1]-2,f[i-1][j-1]+(a[i]==b[j]?1:0)))\)
Code~
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#define R register int
using namespace std;
char a[110],b[110];
int f[110][110];
inline int max(int a,int b) {return a>b?a:b;}
int main()
{
scanf("%s%s",a+1,b+1);
R la=strlen(a+1),lb=strlen(b+1);
for(R i=1,x=-2;i<=la||i<=lb;i++,x-=2) f[0][i]=f[i][0]=x;
f[0][0]=0;
for(R i=1;i<=la;i++) for(R j=1;j<=lb;j++)
f[i][j]=max(f[i-1][j]-2,max(f[i][j-1]-2,f[i-1][j-1]+(a[i]==b[j]?1:0)));
printf("%d\n",f[la][lb]);
return 0;
}
这是mcr130102的博客,转载请注明出处