NYOJ983 首尾相连数组的最大子数组和 + NYOJ754 蚂蚁的难题(二) (思路题)

来源:互联网 发布:windows系统购买 编辑:程序博客网 时间:2024/06/05 03:09


NYOJ983  http://acm.nyist.net/JudgeOnline/problem.php?pid=983

 看完题就想着把数组扩大二倍存下a[i+n]=a[i],然后求连续子序列最大和时标记下位置,让长度不超过n,交上去wa,感觉没有想法错,然后就问了队友怎么做,她是求了个连续子序列的最大和,最小和,比较sum-min和max取个最大的,这样确实不错,但还是不知道自己的想法错哪里了,就去看了下讨论区,大家都是这样的写法,看到有人说和  754 蚂蚁的难题(二)  差不多就看了下,这题的第一个样例都过不了瞬间发现哪里错了,也没法改,看来想法不可行。


这两题思路很好:求个连续最大和,连续最小和(总和-连续最小和=除去连续最小和那段其他首尾相连的和),比较下去最大即可,


code:

 #include<stdio.h>#include<string.h>#include<algorithm>#define inf 0x3f3f3f3fusing namespace std;int a[200005];int main(){    int n;    while(~scanf("%d",&n))    {        for(int i=0; i<n; i++)        {            scanf("%d",&a[i]);        }        int sum=0,minn=inf,maxx=0;        for(int i=0; i<n; i++)        {             sum+=a[i];            if(sum<0)            {               sum=0;            }            maxx=max(maxx,sum);        }        sum=0;        for(int i=0; i<n; i++)        {            sum+=a[i];            if(sum>0)            {               sum=0;            }            minn=min(minn,sum);        }        sum=0;        for(int i=0; i<n; i++)        {            sum+=a[i];        }        printf("%d\n",max(maxx,sum-minn));    }}        




NYOJ754 蚂蚁的难题(二)    http://acm.nyist.net/JudgeOnline/problem.php?pid=745


这题范围较大超出int要用long long 因为没注意wa了几遍,不过数据较水没考虑全为负的情况输出0或最大的都能过




0 0