hdu 1003(未完成)

来源:互联网 发布:听戏曲的软件 编辑:程序博客网 时间:2024/06/05 10:48

思路:从第一个数字开始求和,得到求和的数列后求出和的最小值 和和的最大值位置,分两种情况:

当和最小值大于0时,说明开始位置是从第一次数字开始的;

当和最小值小于0事,说明开始位置在此位置的后一位;

注意在第一个位置的判断;

得到两个位置后将两个位置之间的数求和


WA,还没想明白;

#include <iostream>#include <stdio.h>#define N 100005#define MAX_N 1005#define MIN_N -1005using namespace std;int number[N];int temp;int sum = 0 ;int maxN = MIN_N;int minN = MAX_N;int main(){    int n,i,j;    int T,flagStart,flagEnd;    cin >> T;    for(int j = 1; j <= T; j++) {        maxN = MIN_N;        minN = MAX_N;        sum = 0;        cin >> n;        for(int i = 0; i<n; i++) {            cin >> temp;            number[i] = temp;            sum += temp;            if(sum > maxN) {                maxN = sum;                flagEnd = i;            }            if(sum <= minN) {                minN = sum;                flagStart = i;            }        }        //cout << maxN <<" " << minN <<endl;        if(minN >= 0){            flagStart = 0;        }        if(flagStart != 0 || number[flagStart] < 0) {            flagStart++;        }       // cout  << flagStart << "t" <<endl;        sum = 0;        for( i = flagStart; i <= flagEnd; i++) {            sum += number[i];        }        cout << "Case " << j << ":" << endl;        cout << sum << " " << ++flagStart << " " << ++flagEnd << endl;        cout << endl;    }    return 0;}


原创粉丝点击