最大のサブセグメントのコピー

オリジナルます。http://xiaying-hefei.javaeye.com/blog/752299

 

動的計画:

      基本的な考え方は、問題がいくつかのサブの質問、最初のサブ問題解決、元の問題の解決およびこれらのサブ課題から得られた溶液に細分されます解決することであり、分割し、征服することと似ています。そして分割し、異なるがしばしば分解しない独立した動的計画法、サブ問題の問題を解決するのに適している征服。

      我々は、すべての問題が解決されたから答えを記録するためのテーブルを使用しています。動的計画法は、通常、最良の特性のいくつかの問題を解決するために使用されます。そのような問題では、各ソリューションは値に対応し、我々は最高の価値を持って解決策を見つけることを願っています。

 

問題:

      nは整数で与えられる(負の整数であってもよい)の配列A1からなる、A2、...、および最大配列のサブセグメントを求めます。すべてが負の整数およびゼロのときに最大のサブセグメントを定義します。例えば、( - 2,11、-4,13、-5、-2)、および-4 = 20 + 11 + 13最大フィールド

 

コードは以下の通りであります:

#include <stdio.h>

// 定义b[j]为a[i]...a[j]的最大子段和。则当b[j-1] > 0时,b[j] = b[j-1] + a[j],否则b[j] = a[j]
int maxSum(int *v, int n) {
	
	int sum = 0, b = 0;
	int i;
	for(i = 1; i <= n; i++) {
		if(b > 0) b += v[i];
		else b = v[i];
		if(b > sum) sum = b;
	}
	return sum;
}

void main() {
	
	int a[] = { 0, -2, 11, -4, 13, -5, -2 };
	printf("%d\n", maxSum(a, 6));
}

ます。https://www.cnblogs.com/anotherday/archive/2010/11/25/1887548.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33904756/article/details/94515215