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;
}
posted @ 2024-09-03 16:43  mcr130102  阅读(1)  评论(0编辑  收藏  举报
请不要抄袭任何人的博客,这是对一名开发者最基本的尊重。