第36699题 组合题
完善程序(第二题):石子合并(区间 DP)

(石子合并)有 n 堆石子排成一排,第 i 堆有 a[i] 个石子。每次可以合并相邻的两堆,合并的代价为这两堆石子数之和。求把所有石子合并成一堆的最小总代价。保证 1 ≤ n ≤ 300,0 ≤ a[i] ≤ 10000。

以下代码用区间 DP 求解,f[l][r] 表示把第 l 堆到第 r 堆合并成一堆的最小代价。试补全程序。

#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

const int MAXN = 305;
int a[MAXN], sum[MAXN];
int f[MAXN][MAXN];

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
        sum[i] = sum[i - 1] + a[i];
    }
    ___①___;
    for (int i = 1; i <= n; ++i) f[i][i] = ___②___;
    ___③___
        for (int l = 1; l + len - 1 <= n; ++l) {
            int r = l + len - 1;
            for (int k = l; k < r; ++k)
                f[l][r] = ___④___;
        }
    printf("%d\n", ___⑤___);
    return 0;
}
{{ option.label }}
子题{{ index + 1 }} {{ child.type_label }}
{{ option.label }}
✓ 正确 ◐ 部分正确 ✗ 错误
程序运行统计
暂无判题统计
知识点:
提交{{ questionInfo.stats ? questionInfo.stats.submit_count : 0 }}次 正确率{{ statsAccuracy }}%
答案解析