求助 只过了第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;
}