hdu-1159 裸LCS

来源:互联网 发布:淘宝自然堂是正品吗 编辑:程序博客网 时间:2024/05/22 17:14

把dp边界值的初始化放到二重循环里,代码看上去真是优雅呢!

#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <iostream>#include <cmath>#include <vector>#include <algorithm>using namespace std;#define DEBUGconst int maxn=1000+5,maxv=26,INF=0x3f3f3f3f;int n,d[maxn],a[maxn],dp[maxn][maxn];char s1[maxn],s2[maxn];int n1,n2;int main(){#ifdef DEBUG    freopen("in.txt", "r", stdin);    freopen("out.txt", "w", stdout);#endif    while(scanf("%s",s1+1)!=EOF){        scanf("%s",s2+1);        memset(dp,0,sizeof(dp));        n1=strlen(s1+1);        n2=strlen(s2+1);        for(int i=0;i<=n1;i++){            for(int j=0;j<=n2;j++){                if(i==0){dp[i][j]=0;continue;}                if(j==0){dp[i][j]=0;continue;}                if(s1[i]==s2[j]){                    dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);                }                else{                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);                }            }        }        printf("%d\n",dp[n1][n2]);    }#ifdef DEBUG    fclose(stdin);    fclose(stdout);#endif    return 0;}