P1278 单词游戏
Posted 1129-tangqiyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1278 单词游戏相关的知识,希望对你有一定的参考价值。
状态压缩,用二进制来保存状态
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 string words[17]; 5 int rem[17][70000];//末尾是第i个单词的时候,用了集合是j的元素 6 int ans; 7 int dfs(int now,int book) 8 9 if(rem[now][book]!=-1)return rem[now][book]; 10 rem[now][book]=0; 11 for(int i=0;i<n;i++) 12 13 if(*(words[now].end()-1)==words[i][0]/*取最后一个字母判断是否可以接*/&&((book&(1<<i))==0)/*是否用过*/) 14 15 rem[now][book]=max(rem[now][book],dfs(i,(book|(1<<i)))/*添加元素继续搜索*/); 16 17 18 return rem[now][book]+=words[now].size(); 19 20 int main() 21 22 memset(rem,-1,sizeof(rem)); 23 scanf("%d",&n); 24 for(int i=0;i<n;i++) 25 cin>>words[i]; 26 for(int i=0;i<n;i++)//枚举开头的单词 27 28 ans=max(ans,dfs(i,(1<<i))); 29 30 printf("%d",ans); 31
以上是关于P1278 单词游戏的主要内容,如果未能解决你的问题,请参考以下文章