站外题求助
  • 板块题目总版
  • 楼主shx2011
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/11/9 23:13
  • 上次更新2024/11/10 10:27:16
查看原帖
站外题求助
1071426
shx2011楼主2024/11/9 23:13

题目大意

有 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了

WA code

#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;
}

2024/11/9 23:13
加载中...