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"); }
第一次作业,代码如上。
本题并不难,大致采用线性DP的思想,时间复杂度为O(n),空间复杂度也为O(n)。
动态转移方程为:f[n]=max(f[n-1]+a[n],0) f[0]=0;
ans=max(f[k]) 1≤k≤n
测试图: