0
点赞
收藏
分享

微信扫一扫

自定义类型:联合和枚举

题解

用动态规划,dp[i]表示由i结尾的数的最长接龙序列,算出最长的接龙数列,再用n减去这个长度,就是需要删掉的最小。

设l是a[i]的第一个数字,r为a[i]的最后一个数字,则以i结尾的数列长度要么就是以l结尾的数转移过来或者本身。

读入方式用字符串,这样可以直接找到第一个字符和最后一个字符。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
ll n;
string last,next;
ll ans;
ll dp[100005];
int main()
{
	cin>>n;
	
	for(int i=1;i<=n;i++)
	{
		string now;
		cin>>now;
		
		dp[now[now.size()-1]-'0']=max(dp[now[now.size()-1]-'0'],dp[now[0]-'0']+1);
	}
	for(int i=0;i<=9;i++)
	{
		ans=max(ans,dp[i]);
	}
	cout<<n-ans<<endl;
	return 0;
}
举报

相关推荐

0 条评论