求助求助
查看原帖
求助求助
815190
syxuu楼主2023/2/19 21:13

求助 只过了第4个点

#include<iostream>
using namespace std;

char CATCH_DRAGO_WORD[25][20];
int USE_WORD[25];
int WORD_LENGTH[25];
int OVERLAP[25][25];
int N_WORD;
int maxlength;
int sum;

int JUDGE(int i, int j) {
    if (USE_WORD[j] > 2) {
        return 0;
    }
    if (OVERLAP[i][j] != -1) {
        return OVERLAP[i][j];
    }
    int max = 0;

    for (int n = 1; (n <=WORD_LENGTH[j] - 1) && (n <=WORD_LENGTH[i] - 1); n++) {
        bool z = true;
        for (int m = 0; m < n; m++) {
            if (CATCH_DRAGO_WORD[i][WORD_LENGTH[i] - n+m] != CATCH_DRAGO_WORD[j][m]) {
                z = false;
                break;
            }
        }
        if (z) {
            max = n;
        }
    }
    OVERLAP[i][j] = max;
    return max;
}

void CATCH_WORD(int i) {

    USE_WORD[i]++;
    for (int j = 1; j <=N_WORD; j++) {
        
        
            int n = JUDGE(i, j);
            if (n != 0) {   
                sum += WORD_LENGTH[j] - n;
                CATCH_WORD(j);
                USE_WORD[j]--;
            }
            else {
                maxlength > sum ? maxlength = maxlength : maxlength = sum;
                
            }
        
    }
    sum = 0;
}

int main() {
    for (int i = 0; i < 25; i++) {
        for (int j = 0; j < 25; j++) {
            OVERLAP[i][j] = -1;
        }
    }
    cin >> N_WORD;
    for (int i = 1; i <= N_WORD; i++) {
        cin >> CATCH_DRAGO_WORD[i];
        int j = 0;

        while (CATCH_DRAGO_WORD[i][j++] != '\0') {
            WORD_LENGTH[i]++;
        }
    }
    cin >> CATCH_DRAGO_WORD[0];
    for (int i = 1; i <=N_WORD; i++) {
        if (CATCH_DRAGO_WORD[i][0] == CATCH_DRAGO_WORD[0][0]) {
            USE_WORD[i]++;
            sum += WORD_LENGTH[i];
            CATCH_WORD(i);
            USE_WORD[i]--;
        }
    }
    
    cout << maxlength;
    return 0;
}
2023/2/19 21:13
加载中...