Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
109485 | 赵德明 | [NOIP2000 普及组/提高组] 单词接龙 | C++ | 解答错误 | 50 | 0 MS | 256 KB | 928 | 2023-11-09 13:17:57 |
#include<bits/stdc++.h> using namespace std; //#define int long long int msum=0; int n,ba[25]; string a[25]; char f; int pd(int ai,int bi,int al,int bl){ string t; int mt=0; bl=min(al,bl); for(int i=1;i<=bl;i++){ t=a[ai].substr(al-i,i); if(t==a[bi].substr(0,i)){ mt=i; } } return mt; } void dfs(int ii,int sum,int l){ if(ii==1){ for(int i=1;i<=n;i++){ if(a[i][0]==f){ ba[i]++; dfs(i+1,a[i].size(),i); ba[i]--; } } } else{ bool b=1; int alen=a[l].size(),blen; for(int i=1;i<=n;i++){ if(ba[i]<2){ blen=a[i].size(); int r=pd(l,i,alen,blen); if(r>0){ ba[i]++; dfs(ii+1,sum+blen-r,i); ba[i]--; b=0; } } } if(b){ msum=max(msum,sum); } } } signed main(){ memset(ba,0,sizeof(ba)); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>f; dfs(1,0,0); cout<<msum; return 0; }