您的位置:首页 > 其它

最优子序列求和DP算法(效率较高)

2016-01-15 00:00 148 查看
首次接触了一些有关dp算法的题型,开始还有点思路,但在编程的过程当中遇到了些障碍,经过一番辛苦搜索,最后,总算是把最优子序列的算法给想明白了。

int maxSubSum4( const vector<int> & a )

{

int maxSum = 0, thisSum = 0;

for( int j = 0; j < a.size( ); j++ )

{

thisSum += a[ j ];//求一段子序列的和

if( thisSum > maxSum )//验证该段子序列是否是所求的最大和,即最大和非负或者为最大负数

maxSum = thisSum;

else if( thisSum < 0 )

thisSum = 0;//任何负的子序列不可能是最优子序列的前缀(需要做题慢慢体会)

}

return maxSum;

}





hdu1003

1
#include
"
iostream
"

2

using

namespace
std;

3

int
main()

4
{

5

int
n,m,a,i,j
=
0
;

6
cin
>>
n;

7

while
(n)

8
{

9
cin
>>
m;

10

int
sum
=
0
,k
=
0
,max
=-
99999999
,start
=
0
,end
=
0
;

11

for
(i
=
0
;i
<
m;i
++
)

12
{

13
cin
>>
a;

14
sum
+=
a;

15

if
(sum
>
max)

16
{

17
max
=
sum;

18
start
=
k
+
1
;

19
end
=
i
+
1
;

20

21
}

22

23

if
(sum
<
0
) { sum
=
0
; k
=
i
+
1
;}

24
}

25

26
cout
<<
"
Case
"
<<
"

"
<<++
j
<<
"
:
"
<<
endl;

27
cout
<<
max
<<
"

"
<<
start
<<
"

"
<<
end
<<
endl;

28

if
(n
>
1
) cout
<<
endl;

29
n
--
;

30
}

31

return

0
;

32
}


(注:涉及到DP算法的问题还有很多,我会在以后的学习当中逐步加以补充的)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: