已AC,但是有一点小小的疑惑
查看原帖
已AC,但是有一点小小的疑惑
353878
异想之旅楼主2022/7/4 14:28

我的代码如下:

#include <bits/stdc++.h>
using namespace std;

pair<int, int> x[501];

int f[1001][1001];

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x[i].first;
        x[i + n].first = x[i].first;
    }
    for (int i = 1; i <= n * 2 - 1; i++) x[i].second = x[i + 1].first;
    x[n * 2].second = x[1].first;
    for (int t = 1; t <= n; t++) {
        for (int i = 1; i <= n * 2 - t; i++) {
            int j = i + t;
            for (int k = i; k <= j - 1; k++) {
                f[i][j] =
                    max(f[i][j], f[i][k] + f[k + 1][j] +
                                     x[i].first * x[k].second * x[j].second);
            }
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) ans = max(ans, f[i][i + n - 1]);
    cout << ans;
}

设n=3,我的疑惑是在动态规划过程中有可能取到t=3,i=3,j=6的情况,即对f[3][6]进行更新,这种情况下更新的区间长度已经大于n了,是怎么一回事?

2022/7/4 14:28
加载中...