1001

来源:互联网 发布:数据库优化方法 编辑:程序博客网 时间:2024/04/29 03:03

题意:给定几个数,第一个数代表这行除这个数外还有几个数,选出后面数的其中的一段,使得它们相加和最大,并输出这个和,

思路:这一段开始的位置,结束的位置标记好,创建一个变量是当前的和,例如sum,maxsum是最大和,进行比较,如果前者大就就更改maxsum的值,否则不变。最开始的时候就为0,所以max小于0的时候就应跳过,进行下个位置,位置的标注要注意到。

感想:不算太难的一道题

#include <iostream> 
#include <cstdio> 
using namespace std; 
 
int a[100005]; 
 
int main() 

    int j,i,k,n,m,t; 
    cin>>t; 
    for (j=1;j<=t;j++) 
    { 
        cin>>n; 
        for(i=0;i<n;i++) 
            cin>>a[i]; 
        int sum=0,maxsum=-1005,first =0, last = 0, temp = 1; 
        for (i=0;i<n;i++) 
        { 
            sum += a[i]; 
            if (sum > maxsum) 
            { 
                maxsum = sum; 
                first = temp; 
                last = i+1; 
            } 
            if (sum < 0) 
            { 
                sum = 0; 
                temp = i+2; 
            } 
        } 
          cout<<"Case "<<j<<":"<<endl; 
          cout<<maxsum<<" "<<first<<" "<<last<<endl; 
        if (j!=t) 
            cout<<endl; 
    } 
 
    return 0; 

0 0
原创粉丝点击