萌新刚学dp,求助
查看原帖
萌新刚学dp,求助
198719
洛璟楼主2021/1/26 15:34

WA掉力,连样例都过不了,debug疯了,求助各位大佬qaq

#include<bits/stdc++.h>
#define  re register
using namespace std;
int f1[310][310], f2[310][310], a[310], s[310];
int n;
inline int read()
{
    int x = 0, f = 1;
    char c = getchar();
    while (c < '0' || c>'9')
    {
        if (c == '-') f = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
    {
        x = (x << 3) + (x << 1) + (c ^ '0');
        c = getchar();
    }
    return x * f;
}
int main()
{
    n = read();
    for (re int i = 1;i <= n;++i)
    {
        a[i] = read();
        a[i + n] = a[i];
    }
    for (re int i = 1;i <= 2 * n;++i)
    {
        s[i] = s[i - 1] + a[i];
    }
    memset(f2, 0x3f, sizeof(f2));
    for (re int i = 1;i <= n;++i)
    {
        f2[i][i] = 0;
    }
    for (re int len = 2;len <= n;len++)
    {
        for (re int i = 1;i <= 2 * n - len + 1;i++)
        {
            int j = i + len - 1;
            for (re int k = i;k < j;k++)
            {
                f1[i][j] = max(f1[i][j], f1[i][k] + f1[k + 1][j] + s[j] - s[i - 1]);
                f2[i][j] = min(f2[i][j], f2[i][k] + f2[k + 1][j] + s[j] - s[i - 1]);
            }
        }
    }
    int ans1 = 0, ans2 = 0x7fffffff;
    for (re int i = 1;i <= n;i++)
    {
        ans1 = max(ans1, f1[i][i + n - 1]);
        ans2 = min(ans2, f2[i][i + n - 1]);
    }
    printf("%d\n%d", ans2, ans1);
    return 0;
}
2021/1/26 15:34
加载中...