记忆化搜索35pts求调
查看原帖
记忆化搜索35pts求调
739695
pherhf楼主2024/10/29 08:17

n方的做法,13-15WA了,dfs里pos是记录上一个与u-1位置不同色的位置。

#include <bits/stdc++.h>
using namespace std;

// const int N = 2e5 + 10;
const int N = 2010;
int t, n;
int a[N];
int dp[N][N];

int dfs1(int u, int pos) {
    if (u > n)
        return 0;
    if (dp[u][pos])
        return dp[u][pos];
    int ret = 0;
    ret = (a[u] == a[u - 1] ? a[u] : 0) + dfs1(u + 1, pos);
    ret = max(ret, (a[u] == a[pos] ? a[u] : 0) + dfs1(u + 1, u - 1));
    return dp[u][pos] = ret;
}

int main() {
    // ios::sync_with_stdio(0);
    // cin.tie(0);
    cin >> t;
    while (t--) {
        memset(a, 0, sizeof a);
        memset(dp, 0, sizeof dp);
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        cout << dfs1(1, 0) << '\n';
    }

    return 0;
}
2024/10/29 08:17
加载中...