注册 登录
编程论坛 C++教室

请问我这样做为什么错了?快来呀

op123 发布于 2022-08-26 16:40, 1719 次点击
2117 - 【基础】石子合并(环形2)

题目描述
在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
试设计出1个算法,计算出将N堆石子合并成1堆最大得分。

输入
数据的第1行试正整数N,1≤N≤2000,表示有N堆石子;
第2行有N个数,分别表示每堆石子的个数。

输出
输出共1行,最大得分。

样例
输入复制
4
4 4 5 9
输出复制
54

来源
动态规划 区间动归

#include <bits/stdc++.h>//万能头文件,就是DEV-C++中可以包括除了#include<windows.h>以外所有头文件的头文件
using namespace std;
const int N = 2001;
int a[N*2],s[N*2];
int ma[N*2][N*2];
int n;
int main(){
    cin>>n;
    for(int i = 1;i <= n;i++){
        cin>>a[i];
        a[i+n] = a[i];
    }
    for(int i = 1;i <= n * 2;i++){
        s[i] = s[i-1] + a[i];
        ma[i][i] = 0;
    }
    for(int len = 2;len <= n;len++){
        for(int i = 1;i + len - 1 <= n * 2;i++){
            int j = i + len - 1;
            for(int k = i;k < j;k++){
                ma[i][j] = max(ma[i][j],ma[i][k]+ma[k+1][j]+s[j]-s[i-1]);
            }
        }
    }
    int maxn = 0;
    for(int i = 1;i <= n;i++)
        maxn = max(maxn,ma[i][i+n-1]);
    cout<<maxn<<endl;
    return 0;
}
请问我这样做为什么错了?

[此贴子已经被作者于2022-8-27 12:22编辑过]

6 回复
#2
op1232022-08-26 16:41
提交错了,运行是对的。很奇怪
#3
op1232022-08-26 16:41
网站https://oj.
#4
op1232022-08-27 12:24
快来呀
#5
apull2022-08-27 14:35
提交错误有啥提示哈。
#include <bits/stdc++.h> 这个万能头也不是所有的编译器都有。要是网站的编译器刚好没有呢?
#6
op1232022-08-28 16:12
这个网站的编译器有这个万能头
#7
op1232022-08-28 16:12
说的编译错误
1