算法与数据结构实验题 5.1 最小和

来源:互联网 发布:拿破仑传书评知乎 编辑:程序博客网 时间:2024/05/29 17:07

★实验任务 N 个数排成一排,你可以任意选择连续的若干个数,算出它们的和。问该如 何选择才能使得和的绝对值最小。求出绝对值最小值。
★数据输入
第一行输入整数 N,表示数字的个数。接下来 N 行描述这 N 个整数。 40%的数据 1<=N<=4000 100%的数据 1<=N<=100000,|每个数字的值|<=10^10
★数据输出
输出一行,表示和的最小绝对值。
输入示例
8
-20
90
-30
-20
80
-70
-60
125
输出示例
5


简单的前缀和应用

/* * minsum.cpp * *  Created on: 2016年10月7日  *      Author: 221500423  CJDM66 */#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;typedef __int64 lld;const lld MAX = 100002;lld a[MAX];lld sum[MAX];bool cmp(lld a,lld b){    return a<b;}int main(void){    int i,n;    lld num,ans;    cin>>n;    for(i=1;i<=n;i++){        scanf("%I64d",&num);        a[i]=num;        sum[i]=sum[i-1]+a[i];    }    sort(sum,sum+n+1,cmp);    ans=sum[1]-sum[0];    for(i=0;i<n;i++){        if(ans>sum[i+1]-sum[i]){            ans=sum[i+1]-sum[i];        }    }    printf("%I64d",ans);    return 0; }
0 0
原创粉丝点击