nowcoder eliminar corchetes | programación dinámica

Enlace: https://ac.nowcoder.com/acm/problem/21303
Fuente: Niuke.com

Descripción del título

Le da una secuencia de paréntesis legal s1, cada vez que puede eliminar un "()",
puede eliminar 0 o más "()" para
averiguar si puede eliminar otra secuencia de paréntesis s2

Ingrese la descripción:

Ingrese una cadena s en la primera línea (2 ≤ | s | ≤ 100)
Ingrese una cadena t en la segunda línea (2 ≤ | t | ≤ 100)

Descripción de salida:

Si puede generar "Posible", de lo
contrario, genera "Imposible"


dp [i] [j] [k] significa que la secuencia s está en el primer iy los corchetes izquierdos k '(' se eliminan, puede coincidir con el primer j de la secuencia t

#include<bits/stdc++.h>
using namespace std;
bool dp[105][105][55];
int main(){
    string s,t;
    cin>>s>>t;
    int len1=s.length();
    int len2=t.length();
    dp[0][0][0]=true;
    for(int k=0;k<len1;k++){
        for(int i=0;i<len2;i++){
            for(int j=0;j<len1/2;j++)
            if(dp[k][i][j]){
                if(j==0&&s[k+1]==t[i+1]) dp[k+1][i+1][0]=1;
                if(s[k+1]=='(') dp[k+1][i][j+1]=1;
                else if(j) dp[k+1][i][j-1]=1;
            }
        }
    }
    if(dp[len1][len2][0]) cout<<"Possible"<<endl;
    else    cout<<"Impossible"<<endl;
}

Supongo que te gusta

Origin www.cnblogs.com/naruto-mzx/p/12760700.html
Recomendado
Clasificación