luoguP2268 [HNOI2002] DNA分子的最佳比对

思路

简单的最长公共子序列。状态转移方程是:f[i][j]=max(f[i1][j]2,max(f[i][j1]2,f[i1][j1]+(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 @   mcr130102  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
请不要抄袭任何人的博客,这是对一名开发者最基本的尊重。
点击右上角即可分享
微信分享提示
想一个人有多想念,那又是文字失效瞬间。