【DP】最大子串和

来源:互联网 发布:阿里云域名怎么绑定ip 编辑:程序博客网 时间:2024/05/16 12:56

题目描述

给定由n(1<n<100)个整数(包含负整数)组成的序列a1,a2,...,an,要在这n个数中选取相邻的一段ai,ai+1,...aj(1≤i≤j≤n),使其和最大,输出该序列子段和的最大值。

输入

输入有多组测试用例

每组测试用例由2行组成,第一行一个整数n,接下来第二行有n个整数

若整数n为0,表示输入结束

输出

输出该序列子段和的最大值

样例输入

81 -3 7 8 -4 12 -10 60

样例输出

23
很基础的DP问题~~~~~
微笑微笑微笑微笑~~~~~~
#include<stdio.h>int a[1000];int main(){    int T;while (scanf("%d",&T)&&T!=0){    int l,i=0,max=0,thissum=0,flag=0;for(i=0;i<T;i++){scanf("%d",&a[i]);thissum+=a[i];if (thissum>max)    {      max=thissum;      flag=1;    }else if (thissum<0)thissum=0;}if(flag)printf("%d\n",max);    else    {        int o=a[0],p;        for(i=1;i<l;i++)            if(o<a[i])            {                p=a[i];                a[i]=o;                o=p;            }            printf("%d\n",o);    }}return 0;}

0 0