P1278 单词游戏

来源:互联网 发布:mac 播放器 自动字幕 编辑:程序博客网 时间:2024/05/21 14:44

题目链接

记忆化搜索。

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define LL long longusing namespace std;const int M=(1<<17);int f[M][20],n,len[20],ans;char s[20][109];int dfs(int x,int S)//S这个状态,最后一个单词是x,再往后接,能够得到的最长长度{    int sum=len[x],ML=0;    for(int i=1;i<=n;i++)    if(!(S&(1<<i-1)))    {        if(s[x][len[x]-1]==s[i][0])        {            ML=max(ML,f[S^(1<<i-1)][i]?f[S^(1<<i-1)][i]:f[S^(1<<i-1)][i]=dfs(i,S^(1<<i-1)));        }    }    return f[S][x]=sum+ML;}int main(){    scanf("%d\n",&n);    for(int i=1;i<=n;i++)    {        cin>>s[i];        len[i]=strlen(s[i]);    }    for(int i=1;i<=n;i++)    {        ans=max(ans,f[1<<i-1][i]?f[1<<i-1][i]:f[1<<i-1][i]=dfs(i,(1<<i-1)));    }    printf("%d",ans);    return 0;}
原创粉丝点击