提交时间:2022-07-13 11:50:39
运行 ID: 51524
#include <bits/stdc++.h> using namespace std; char s[3005]; int n, k, typ, x, ans_num, ans_id; struct node { int lst, f=1, ltr[15]; } t[3005]; string a; int main() { scanf("%d%d%d%s", &n, &k, &typ, s+1); for(int i=1; i<=n; i++) { for(int j=1; j<i; j++) { if((t[j].ltr[s[i]-'a'+1]==0||s[i]==s[j])&&t[j].f+1>=t[i].f) { t[i].lst = j; t[i].f = t[j].f+1; for(int z=1; z<=k; z++) t[i].ltr[z] = t[j].ltr[z]; t[i].ltr[s[i]-'a'+1]++; } else if(t[j].f+1-t[j].ltr[s[i]-'a'+1] >= t[i].f) { t[i].lst = j; t[i].f = t[j].f+1-t[j].ltr[s[i]-'a'+1]; for(int z=1; z<=k; z++) t[i].ltr[z] = t[j].ltr[z]; t[i].ltr[s[i]-'a'+1] = 1; } } if(t[i].f == 1) t[i].ltr[s[i]-'a'+1] = 1; if(t[i].f >= ans_num) ans_id = i, ans_num = t[i].f; } printf("%d\n", ans_num); if(typ==1 || typ==2) { x = ans_id; while(x >= 1) { if(t[ans_id].ltr[s[x]-'a'+1]) { a = s[x]+a; t[ans_id].ltr[s[x]-'a'+1]--; } x = t[x].lst; } cout << a; } return 0; }