E - Railroad UVALive - 4888

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2889

状态转移方程: dp[i][j] = dp[i - 1][j] || dp[i][j] = dp[i][j - 1];

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int dp[1100][1100];
int a[1100];
int b[1100];
int c[2200];
int main()
{
    int n, m;
    while(cin >> n >> m && (n != 0 || m != 0))
    {
        memset(dp, 0, sizeof(dp));
        for(int i = 1; i <= n; i++)
        {
            cin >> a[i];
        }
        for(int i = 1; i <= m; i++)
        {
            cin >> b[i];
        }
        for(int i = 1; i <= n + m; i++)
        {
            cin >> c[i];
        }
        dp[0][0] = 1;
        for(int i = 0; i <= n; i++)
        {
            for(int j = 0; j <= m; j++)
            {
                if(i > 0 && a[i] == c[i + j] && dp[i - 1][j])dp[i][j] = 1;
                if(j > 0 && b[j] == c[i + j] && dp[i][j - 1])dp[i][j] = 1;
            }
        }
        if(dp[n][m])cout << "possible" << endl;
        else cout << "not possible" << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32193741/article/details/82154007
今日推荐