Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51623 | AK2022071323 | 最优子序列 | C++ | 运行超时 | 10 | 1000 MS | 2248 KB | 677 | 2022-07-13 12:19:12 |
#include <iostream> using namespace std; int n,k,t,maxn,vis[27]; string s,ans; inline void dfs(int x,int cnt,string l) { if(x == n) { if(cnt > maxn) { maxn = cnt; if(t) ans = l; } else if(cnt == maxn && t == 2 && l < ans) ans = l; return ; } if(cnt + n - x < maxn) return ; if(!vis[s[x] - 'a']) { vis[s[x] - 'a'] = 1; dfs(x + 1,cnt + 1,l + s[x]); vis[s[x] - 'a'] = 0; } else if(l[cnt - 1] == s[x]) dfs(x + 1,cnt + 1,l + s[x]); dfs(x + 1,cnt,l); } int main() { cin >> n >> k >> t; cin >> s; dfs(0,0,""); cout << maxn << endl; if(t) cout << ans << endl; return 0; }