| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:请问我这样做为什么错了?快来呀!!!
只看楼主 加入收藏
op123
Rank: 6Rank: 6
等 级:贵宾
威 望:21
帖 子:170
专家分:461
注 册:2022-6-4
结帖率:100%
收藏
 问题点数:0 回复次数:3 
请问我这样做为什么错了?快来呀!!!
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;
}
请问我这样做为什么错了?

搜索更多相关主题的帖子: 输出 i++ 合并 for int 
2022-08-29 16:58
op123
Rank: 6Rank: 6
等 级:贵宾
威 望:21
帖 子:170
专家分:461
注 册:2022-6-4
收藏
得分:0 
讨了个没趣
2022-09-04 17:57
op123
Rank: 6Rank: 6
等 级:贵宾
威 望:21
帖 子:170
专家分:461
注 册:2022-6-4
收藏
得分:0 
2022-09-04 17:57
mature119
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:29
专家分:45
注 册:2021-12-7
收藏
得分:0 
感觉用栈会不会很简单?
2022-09-20 21:55
快速回复:请问我这样做为什么错了?快来呀!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015465 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved