11061214 第一次作业

#include <cstdio>
#include <cstdlib>
#include <cstring>
int main()
{
  int f[10000],a[10000];
  int max=0;
  memset(f,0,sizeof(f));
  memset(a,0,sizeof(a));
  int i,j,k,n;
  scanf("%d",&n);
  for (i=1;i<=n;i++)
    scanf("%d",&a[i]);
  for (i=1;i<=n;i++)
  {
    f[i]=f[i-1]+a[i];
    if (f[i]<0) f[i]=0;
    if (f[i]>max) max=f[i];
  }  
  printf("%d\n",max);
  system("pause");
}
View Code

第一次作业,代码如上。

本题并不难,大致采用线性DP的思想,时间复杂度为O(n),空间复杂度也为O(n)。

动态转移方程为:f[n]=max(f[n-1]+a[n],0)  f[0]=0;

                      ans=max(f[k])  1≤k≤n

测试图:

 

 

posted on 2013-09-23 13:22  姜睿昶  阅读(156)  评论(0编辑  收藏  举报