P2734 游戏 A Game(博弈论+区间dp)

https://www.luogu.org/problemnew/show/P2734

思路:设f[i][j]是从i到j的最优解,s是从1到i的和,f【i】【j】=s【j】-s【i】-min(f【i+1】【j】,f【i】【j-1】);

#include <iostream>
#include <cstdio>
using namespace std;
int n, f[210][210], a[210], s[210];
int main() {
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i], s[i] = s[i - 1] + a[i], f[i][i] = a[i];
    for(int i = n - 1; i > 0; i--) {
        for(int j = i + 1; j <= n; j++) {
            f[i][j] = s[j] - s[i - 1] - min(f[i + 1][j], f[i][j - 1]);
        }
    }
    cout << f[1][n] << " " << s[n] - f[1][n];
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Endeavor_G/article/details/88899910