【线性dp】【循环查找的优化-> 字典存储 字典dp(dp值表示的是一个集合)】【蓝桥杯14届】接龙数列

接龙数列

        • 字典优化

原题链接

本题类似于
最长上升子序列问题,只不过这个比较的不是两个值的大小关系,而是最后一个值的数字,和开头的数字 是否相等

#include 
#include 
#include 
#include 
#include 

#pragma GCC optize(2) // 开O2

using namespace std;

const int N = 100010;
int n;
int a[N];
int End[N], Begin[N];
int f[N];

int main()
{
    cin >> n;

    for (int i = 1; i <= n; i ++ )
        cin >> a[i];

    for (int i = 1; i <= n; i ++ )
    {
        End[i] = a[i] % 10; // End直接求
        int x = a[i];

        while(x) // 求Begin
        {
            Begin[i] = x % 10;
            x /= 10;
        }
    }

    for (int i = 1; i <= n; i ++ )
    {
        f[i] = 1;
        for (int j = 1; j < i; j ++ )
            if (End[j] == Begin[i])
                f[i] = max(f[i], f[j] + 1);
    }

    int res = 0;

    for (int i = 1; i <= n; i ++ )
        res = max(res, f[i]);

    cout << n - res << endl;

    return 0;
}
字典优化
//
// Created by trudbot on 2023/4/9.
//

#include 
using namespace std;
int dp[10];

int main () {
    int n, mx = 0; cin >> n;
    for (int i = 0; i < n; i ++) {
        string s; cin >> s;
        int a = s[0] - '0', b = s.back() - '0';
        dp[b] = max(dp[b], dp[a] + 1), mx = max(mx, dp[b]);
    }
    cout << n - mx << endl;
    return 0;
}

作者:trudbot
链接:https://www.acwing.com/solution/content/183951/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(蓝桥杯,算法,职场和发展)