2 条题解

  • 0
    @ 2025-8-6 14:55:52
    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 105;
    int dp[MAXN][MAXN], a[MAXN], t, n;
    int main() {
        scanf("%d", &t);
        for (int cas = 1; cas <= t; cas++) {
            scanf("%d", &n);
            for (int i = 1; i <= n; i++) {
                scanf("%d", &a[i]);
            }
            memset(dp, 0, sizeof(dp));
            for (int i = 1; i <= n; i++) {
                dp[i][i] = 1;
            }
            for (int len = 2; len <= n; len++) {
                for (int i = 1; i + len - 1 <= n; i++) {
                    int j = i + len - 1;
                    dp[i][j] = dp[i][j-1] + 1;
                    for (int k = i; k < j; k++) {
                        if (a[k] == a[j]) {
                            dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j-1]);
                        }
                    }
                }
            }
            printf("Case %d: %d\n", cas, dp[1][n]);
        }
        return 0;
    }
    

    信息

    ID
    2799
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    87
    已通过
    18
    上传者