算法作业实验三

/*105.最大字段和 (15分)
C时间限制:3000 毫秒 |  C内存限制:3000 Kb
题目内容:
给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.
或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].
输入描述
第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数
输出描述
计算出n个整数中连续k个数的最大和
输入样例
5
1 2 3 4 5

7
6 -5 5 8 -13 5 7

输出样例
15
14
*/

#include<iostream>
#include<stdio.h>
using namespace std;
const int maxn = 1e4+10;
int a[maxn];
int dp[maxn][maxn];
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            if(j==i)
                dp[i][j] = a[i];
            else
                dp[i][j] =dp[i][j-1]+a[j];
        }
    }
    int m=0;
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            m = max(m,dp[i][j]);
        }
    }
    cout<<m<<endl;

    return 0;
} 

猜你喜欢

转载自www.cnblogs.com/lusiqi/p/11736601.html
今日推荐