Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
51524 wangjiajian 最优子序列 C++ 解答错误 10 34 MS 492 KB 1340 2022-07-13 11:50:39

Tests(2/20):


#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; }


测评信息: