P9242接龙数列
题目
分析
状态: 以第i个数为结尾的最长接龙序列数为f[i]
决策: 以当前末尾字母结束的最长接龙子序列=max(以当前起始字母结束的最长接龙子序列+1,以当前末尾字母结束的最长接龙子序列)
f[i] = max(f[a[ls-1]-'0'],f[a[0]-'0']+1);
答案: n-f[n]
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,f[N],ans=-1;
string a;
int main(){
cin>>n;
for(int i = 1;i<=n;i++){
cin>>a;
int ls = a.length();
f[a[ls-1]-'0'] = max(f[a[0]-'0']+1,f[a[ls-1]-'0']);
}
//注意:因为是数字接龙,所以只用把每个0-9每个数字遍历即可
for(int i = 0;i<=9;i++){
ans = max(ans,f[i]);
}
cout<<n-ans;
return 0;
}