题解
用动态规划,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;
}