DTGAME - Tiền bạc luôn là thứ quý giá

Tác giả: ladpro98

Ngôn ngữ: C++

#include <bits/stdc++.h>
const int N = 2020;

using namespace std;
int F[N][N], P[N][N];
int n, s[N], a[N];

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        s[i] = s[i - 1] + a[i];
    }
    for(int i = 0; i <= n + 1; i++) P[i][i] = i;
    for(int len = 1; len <= n; len++)
    for(int i = 1; i <= n - len; i++)  {
        int j = i + len;
        for(int k = max(i, P[i][j - 1]); k <= P[i + 1][j] && k < j; k++) {
            int t = min(s[k] - s[i - 1] + F[i][k], s[j] - s[k] + F[k + 1][j]);
            if (F[i][j] < t) {
                F[i][j] = t; P[i][j] = k;
            }
        }
    }
    cout << F[1][n];
    return 0;
}

Download