最大子串求和-动态规划
#include<stdio.h> void find(int *a,int n); int main(){ int a[1000],m,n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); find(a,n); return 0; } void find(int *a,int n){ int tem=a[0],max=a[0]; for(int i=1;i<n;i++){ if(tem<0) tem=a[i];//如果前面的子串和小于零就舍弃,并且开辟一个新的子串,从当前开始 else tem+=a[i];/*如果前面的子串和大于零就与现在相加,就算当前的a[i]是负数仍然相加, 因为子串是连续的,如果加上当成的a[i]后子串变成负数,那么在下一次舍弃,如果是正数那么下一次仍然可以累加上去,继续比较最大值是不是小于当前子串和。*/ if(tem>max) max=tem;//更新最大子串 } printf("%d",max); }
通过累加比较求出数组中的最大子串和