1 条题解

  • 0
    @ 2026-4-30 0:54:54
    // Problem: 搭乘 IOI 火车
    // Contest: Virtual Judge - LibreOJ
    // URL: https://vjudge.net/problem/LibreOJ-2762#author=GPT_vi
    // Memory Limit: 256 MB
    // Time Limit: 1000 ms
    // 
    // Powered by CP Editor (https://cpeditor.org)
    
    # include <bits/stdc++.h>
    using namespace std;
    #define int long long
    
    int n,m,res,a[2005],b[2005],dp[2005][2005][2];
    string s,t;
    signed main()
    {
    	ios_base::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	cin >> n >> m;
    	cin >> s >> t;
    	s = '#' + s;
    	t = '#' + t;
    	for (int i = 1; i <= n; i++)
    	{
    		a[i] = (s[i]=='O');
    	}
    	for (int i = 1; i <= m; i++)
    	{
    		b[i] =(t[i]=='O');
    	}
    	for (int i = 0; i <= n; i++) for (int j = 0; j <= m; j++) dp[i][j][1]=-1e9;
    	for (int i = 0; i <= n; i++)
    	{
    		for (int j = 0; j <= m; j++)
    		{
    			// dp[i][j][k] la bat dau o vi tri i trong xau s 
    			// va vi tri j trong xau t va ky tu tiep theo can la k
    			if (i<n)
    			{
    				dp[i+1][j][1-a[i+1]] = max(dp[i+1][j][1-a[i+1]],dp[i][j][a[i+1]]+1);
    			}
    			if (j < m)
    			{
    				dp[i][j+1][1-b[j+1]] = max(dp[i][j+1][1-b[j+1]],dp[i][j][b[j+1]]+1);
    			}
    		}
    	}
    	for (int i = 0; i <= n; i++)
    	{
    		for (int j = 0; j <= m; j++)
    		{
    			res = max(res,dp[i][j][1]);
    		}
    	}
    	cout <<res;
    }
    
    • 1

    信息

    ID
    9002
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者