ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HDU1159最长公共子序列(滚动数组)

2020-07-30 19:00:28  阅读:34  来源: 互联网

标签:滚动 int long HDU1159 数组 const include dp


题目链接:http://acm.hdu.edu.cn/s

#include<cstdio>
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
typedef long long ll;
const double eps=1e-8;
const int N=1e3;
int dp[2][N];//滚动储存,一个是他本身,一个是前一状态
string a,b;
int main(){
    while(cin>>a>>b){
        memset(dp,0,sizeof dp);//这里要初始化
        int t=0;//记录状态,初始0
        for(int i=1;i<=a.size();i++)//a匹配b序列
        {
            t^=1;//需要先改变状态,a多长就改变多少次状态
            for(int j=1;j<=b.size();j++){
                if(a[i-1]==b[j-1]){
                    dp[t][j]=dp[t^1][j-1]+1;//如果相等,直接相加就行
                }else{
                    dp[t][j]=max(dp[t^1][j],dp[t][j-1]);//不同有两种匹配
                }
            }

        }
        printf("%d\n",dp[t][b.size()]);//这里是最后一次改变状态,匹配b序列长度

    }
    return 0;
}

 

 

howproblem.php?pid=1159

标签:滚动,int,long,HDU1159,数组,const,include,dp
来源: https://www.cnblogs.com/laiqinglin/p/13405784.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有