P1019 [NOIP2000 提高组] 单词接龙
明显的 dfs
>>>string cnt be >> s+1
>>>dfs string better
想好再打
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------debug\n"); using namespace std; int n,us[30],ans; string str[30]; int link(string st1,string st2) { for(int i=1;i<=min(st1.length(),st2.length());i++) { int flag=1; for(int j=0;j<=i-1;j++){ if(st1[st1.length()-1-i+1+j]!=st2[j])flag=0; } if(flag==1&&i==min(st1.length(),st2.length())) return 0; if(flag==1) return i; } return 0; } void dfs(string st,int len) { if(len>ans) ans=len; for(int i=0;i<=n-1;i++) { if(us[i]>=2) continue; int t=link(st,str[i]); if(t!=0) { us[i]++; dfs(str[i],len+str[i].length()-t); us[i]--; } } } int main() { //ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=0;i<=n;i++) cin>>str[i]; dfs(' '+str[n],1); cout<<ans<<'\n'; return 0; }

浙公网安备 33010602011771号