acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(0)讨论(0)提交记录(0)
  • 深搜

    #include<iostream> #include<cstring> #include<vector> using namespace std; const int maxn = 30; int n,ans,vis[maxn]; string a[maxn]; int getOverlap(string a, string b) { int len = min(a.size(), b.size()); for(int l = 1; l < len; l++) { if(a.substr(a.size()-l) == b.substr(0,l)) return l; } return 0; } void dfs(int x,int sum){ ans = max(ans,sum); for(int i = 1;i <= n;i++){ char now = a[x].back(); int overlap = getOverlap(a[x], a[i]); if(overlap > 0 && overlap < min(a[x].size(), a[i].size())){ if(vis[i] < 2){ vis[i]; dfs(i, sum + a[i].size() - overlap); vis[i]--; } } } } int main(){ char fir; cin >> n; for(int i = 1;i <= n;i) cin >> a[i]; cin >> fir; for(int i = 1;i <= n;i++){ if(a[i][0] == fir){ vis[i]++; dfs(i,a[i].size()); vis[i]--; } } cout << ans; return 0; }

    userId_undefined

    137****0822

    时间刺客
    0阅读
    0回复
    0点赞
首页