페이지

2262번: 토너먼트 만들기

https://www.acmicpc.net/problem/2262


#include<cstdio>
#include<algorithm>
using namespace std;
int n, a[256], dp[256][256], l[256], r[256];
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", a + i);
    for (int j = 0; j < n; j++) {
        for (int i = j - 1; i >= 0; i--) {
            l[i] = a[i];
            r[j] = a[j];
            for (int k = i + 1; k < j; k++) {
                l[k] = min(l[k - 1], a[k]);
                r[i + j - k] = min(r[i + j + 1 - k], a[i + j - k]);
            }
            dp[i][j] = 1e9;
            for (int k = i; k < j; k++) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + abs(l[k] - r[k + 1]));
        }
    }
    printf("%d", dp[0][n - 1]);
    return 0;
}

댓글 없음 :

댓글 쓰기