3 条题解

  • 1
    @ 2025-4-20 20:20:42
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 200 + 10;
    string a,b,ans;
    struct node
    {
    	int num;
    	int i;
    	int j;
    }dp[N][N];
    int main(){
    	cin >> a>>b;
    	int lena = a.size();
    	int lenb = b.size();
    	for(int i = 1;i <= lena;i++)
    	{
    		for(int j = 1;j <= lenb;j++)
    		{
    	        if(a[i - 1] == b[j - 1])
    	        {
    	        	dp[i][j].num = dp[i - 1][j - 1].num + 1;
    	        	dp[i][j].i = i;
    	        	dp[i][j].j = j;
    			}
    			else if(dp[i - 1][j].num > dp[i][j - 1].num)
    			{
    	        	dp[i][j].num = dp[i - 1][j].num;
    	        	dp[i][j].i = dp[i - 1][j].i;
    	        	dp[i][j].j = dp[i - 1][j].j;
    			}
    			else 
    			{
    	        	dp[i][j].num = dp[i][j - 1].num;
    	        	dp[i][j].i = dp[i][j - 1].i;
    	        	dp[i][j].j = dp[i][j - 1].j;
    			}
    		}
    	} 
        cout << dp[lena][lenb].num << endl;
        for(int i = dp[lena][lenb].i,j = dp[lena][lenb].j,tmp;i | j;i = tmp)
        {
        	ans = a[i - 1] + ans;
        	tmp = dp[i - 1][j - 1].i;
        	j = dp[i - 1][j - 1].j;
    	}
    	cout << ans;
    	return 0;
    }
    

    信息

    ID
    1508
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    226
    已通过
    36
    上传者