有 n 个单词( 1≤n≤50 ),每个单词由 2个小写字母组成,并约定第 1 个单词为龙头。当2个单词形如ab-bc时称为可以接龙 求最长接龙长度
如8个单词: aa ac ab de bh hk cd af
最长接龙长度为 4(aa-ac-cd-de)
给定n个单词求最长接龙长度
dp,dp[i]为以i结尾的最长接龙长度
对于dp[i],遍历它之前的每一个可接龙的字符串,找到最长的接龙
好像没啥问题对吧但是 WA了
#include<bits/stdc++.h>//dp为啥WA啊
using namespace std;
int n,ans;
string s[60];
int dp[60];
bool check(string t,string x){
if(t[1]==x[0]) return 1;
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
}
dp[1]=1;//dp[i]:以i结尾的最大接龙长度
for(int i=2;i<=n;i++){
int sum=1;
for(int j=i-1;j>=1;j--){
string t=s[j];
if(check(t,s[i])){
sum=max(sum,dp[j]+1);//从前面的能接龙的字符串中选一个接龙后长度最大的数
}
}
dp[i]=sum;
ans=max(ans,dp[i]);
}
//for(int i=1;i<=n;i++) cout<<dp[i]<<" ";
//cout<<check(s[1],s[2]);
cout<<ans;
return 0;
}