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

请问我这样做为什么错了?(还是不对)

op123 发布于 2022-08-17 18:25, 1823 次点击
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-26 16:48编辑过]

7 回复
#2
chenyucheng2022-08-21 16:25
请自己先说好,哪里是错的。
#3
op1232022-08-21 16:31
提交错了,运行是对的
#4
op1232022-08-21 16:31
很奇怪
#5
op1232022-08-21 16:34
网址:https://oj.
#6
chenyucheng2022-08-23 23:18
已结帖却不给分的屑
#7
op1232022-08-26 16:40
嗯,我觉得需要再来一个帖子
#8
op1232022-08-26 16:45
我又发了个帖子,大家都去那里
1