基本题二:最大字段和问题
一、实验目的与要求
1、熟悉最长最大字段和问题的算法;
2、进一步掌握动态规划算法;
二、实验题
若给定n个整数组成的序列a1,a2,a3,...,an,求该序列形如ai+ai+1+...+an的最大值。
三、实验提示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
int MaxSum( int n, int *a, int &besti, int &bestj)
{ int sum=0;
for ( int i=1;i<=n;i++)
for ( int j=i;j<=n;j++)
{
int thissum=0;
for ( int K=i;k<=j;k++)thissum+=a[k];
if (thissum>sum)
{
sum=thissum;
besti=i;
bestj=j;
}
}
return sum;
}
intMaxSum( int n, int *a, int &besti, int &bestj)
{
int sum=0;
for (inti=1;i<=n;i++)
{
int thissum=0;
for (intj=i;j<=n;j++)
{
thissum+=a[j];
if (thissum>sum)
{
sum=thissum;
besti=i;
bestj=j;
}
}
}
return sum;
} |
四、源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public static void main(String[] args) {
int [] a = { 12 , 8 , 2 , 8 , 2 , 9 , 10 };
System.out.println(maxSum( 3 , a));
}
public static int maxSum( int n, int [] a) {
int sum = 0 ;
for ( int i = 0 ; i < a.length - n + 1 ; i++) {
int thissum = 0 ;
for ( int v = 0 ; v < n; v++) {
System.out.println(v + "--" + i);
thissum += a[v + i];
}
System.out.println( "---------------------------" + thissum);
if (thissum > sum)
sum = thissum;
}
return sum;
}
|
0--0
1--0
2--0
---------------------------22
0--1
1--1
2--1
---------------------------18
0--2
1--2
2--2
---------------------------12
0--3
1--3
2--3
---------------------------19
0--4
1--4
2--4
---------------------------21
22
本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/824843