单词接龙 深搜

来源:互联网 发布:怎么申请退款淘宝手机 编辑:程序博客网 时间:2024/05/22 12:15

http://ayit.acmclub.com/index.php?app=problem_title&id=233&problem_id=21522

#include <iostream>#include <string>#include <limits.h>#include <cstdio>using namespace std;string s[25];char c;int n,vis[25],m=0;void dfs(string a,int sum){    int i,j,k,t;    for(i = 0; i < n; i++)    {        if(vis[i]<2)        {            int max = 0;            for(j = 1; j<=s[i].size();j++)            {                if(a.size() <s[i].size())                {                    for(k = 0; k < a.size(); k++)                    if(a[k] != s[i][k]) break;                    if(k == a.size()) break;                }                for(k = a.size()-j,t= 0; t < j&&k<a.size(); t++,k++)                {                    if(a[k] != s[i][t]) break;                }                if(k == a.size()) {max = j;break;}            }            if(max == 0) continue;            vis[i]++;            dfs(s[i],sum+a.size() - max);            vis[i]--;        }    }    sum += a.size();    if(sum>m) m= sum;}int main(){    int i;    cin>>n;    for(i = 0; i < n; i++)    cin>>s[i];    cin>>c;    for(i = 0; i < n; i++)    {        if(s[i][0] == c)        {            vis[i]++;            dfs(s[i],0);            vis[i]--;        }    }    cout<<m<<endl;    return 0 ;}


0 0
原创粉丝点击