HDOJ1003

it2022-05-17  54

求解最大子序列的和。

首先子序列的起始元素不一定是从第一个元素开始的。

开始的时候,用的是暴力破解。。。总是TLE。。。


 

后来在网上找到了参考的公式是:

s[1] = a[1];

s[n] = s[n-1]>=0?s[n-1]+a[n]:a[n];

貌似是一种动态规划,和以前做的背包问题有些类似

#include <stdio.h>int data[100000];int main(){int i,j,k,l,sum,b,e,max=0,t; scanf("%d",&i);for (j=1;j<=i;j++) { max = -100000; scanf("%d",&k);for (sum=0, l=0, t=0 , e=0;l<k;l++) { scanf("%d",&data[l]);if (sum>=0) { sum+=data[l]; }else { sum = data[l]; t = l; }if (sum>max) { max = sum; b = t; e = l; } } printf("Case %d:\n",j); printf("%d %d %d\n",max,b+1,e+1);if (j != i) printf("\n"); }return 1;}

 

转载于:https://www.cnblogs.com/CheeseZH/archive/2012/03/14/2397044.html

相关资源:数据结构—成绩单生成器

最新回复(0)