1 条题解

  • 0
    @ 2025-8-24 22:46:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Convergent_Series
    .

    搬运于2025-08-24 22:46:42,当前版本为作者最后更新于2023-06-05 13:36:01,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    计算去掉的数量不好思考,可以先算出最长的接龙数列长度,与 nn 相减即为答案。

    考虑使用动态规划计算。

    dpidp_i 为以 ii 结尾的最长序列,枚举到 aia_i 时:

    aia_i 开头数字为 pp,结尾数字为 qq

    • 若选取 aia_i,则 dpq=dpp+1dp_q=dp_p+1;
    • 若不选取 aia_i,则 dpqdp_q 不变。

    所以可以得到状态转移方程为 dpq=max(dpp+1,dpq)dp_q=\max(dp_p+1,dp_q)

    最后答案即为 nmaxdpi (0i9)n-\max dp_i\ (0\le i\le9)

    参考代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,dp[10],maxn;
    string a;//为了方便取头尾,可以以字符串形式存储
    signed main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a;
    		int ln=a.length();
    		dp[a[ln-1]-'0']=max(dp[a[ln-1]-'0'],dp[a[0]-'0']+1);
    	}
    	for(int i=0;i<=9;i++) maxn=max(maxn,dp[i]);
    	cout<<n-maxn;
    	return 0;
    }
    
    • 1

    信息

    ID
    8679
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者