1. 程式人生 > >最大欄位和 動態規劃

最大欄位和 動態規劃

  1. 最大子段和

給定由n個整數(可能有負整數)組成的序列(a1,a2,…,an),最大子段和問題要求該序列形如 的最大值(1<=i<=j<=n),當序列中所有整數均為負整數時,其最大子段和為0。

#include<stdio.h>
#include<string.h>
#define N 100
int MaxSum(int n,int a[])
{
	int sum=0,b=0;
	for(int i=0;i<n;i++){
	   if(b>0)
		   b+=a[i];
	   else
		   b=a[i];
	   if(b>sum)
		   sum=b;
	}
    if(sum<0)
		return 0;
	else
		return sum;

}
void main()
{
    int a[N],len,i;
    printf("需要輸入多少個數字?\n");
	scanf("%d",&len);
	printf("開始輸入你需要輸入的數字:\n");
	for(i=0;i<len;i++){
	    scanf("%d",&a[i]);
	}
    printf("\n最大子段和為:%d\n",MaxSum(len,a));
}