球球大佬救救弱鸡,为什么这样dp不正确呢
查看原帖
球球大佬救救弱鸡,为什么这样dp不正确呢
1078604
IQAQI楼主2024/4/15 21:56

dp[i]表示以a[i]结尾需要删除的数量

#include <iostream>
#include <bits/stdc++.h>
const int maxn = 1000001;
using namespace std;
vector<int>jilu[10];
long long a[maxn],dp[maxn];
long long N;
int main()
{
    cin >> N;
    for (int i = 1; i <= N; ++i) {
        dp[i] = LLONG_MAX;
        cin >> a[i];
        jilu[a[i] % 10].push_back(0);
    }
    long long ans=N;
    dp[0] = 0;
    for (int i = 1; i <= N; ++i) {
        int temp = a[i];
        while (temp >= 10) { temp /= 10; }
        for (auto& j : jilu[temp]) {
            dp[i] = min(dp[i], dp[j] + (i-j) - 1);
        }
        ans = min(N - i + dp[i], ans);
        jilu[a[i] % 10].push_back(i);
    }
    cout << ans;
}
2024/4/15 21:56
加载中...