Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51520 | AK2022071322 | 最优子序列 | C++ | 运行出错 | 0 | 2058 MS | 252 KB | 1528 | 2022-07-13 11:50:21 |
#include <bits/stdc++.h> using namespace std; int num=0; struct node { char value; int wide; } S[210]; int ans=0; int anss[210]; int tik[210]; string ss; bool check() { for(int i=0; i<num;) { if(tik[i]==2) { int mark=0; char tt=S[i].value; int j; for(j=i+1; j<num; j++) { if(tik[i]==2&&tt!=S[j].value&&mark==0) { mark=1; } else if(tik[i]==2&&tt==S[j].value&&mark==0) { ; } else if(tik[i]==2&&tt==S[j].value&&mark==1) { return 0; } } i=j; continue; } i++; } return 1; } void dfs(int x,int tot) { if(x>num) { if(check()) { if(tot>ans) { ans=tot; for(int i=0; i<num; i++) { anss[i]=tik[i]; } } return; } return; } tik[x]=1; dfs(x+1,tot); tik[x]=2; dfs(x+1,tot+S[x].wide); tik[x]=0; } int main() { int n,k,type,tot=0; string s; cin>>n>>k>>type>>s; for(int i=0; i<n;) { S[num].value=s[i]; int j; for(j=i+1; j<n; j++) { if(s[j]!=s[i])break; } S[num].wide=j-i; num++; i=j; } dfs(0,0); cout<<ans<<endl; if(type) { for(int i=0; i<num; i++) { if(anss[i]==2) { for(int j=0; j<S[i].wide; j++) { cout<<S[i].value; } } } } return 0; }