HDU 1003 Max Sum

题外话:虽然是简单到不能再简单的题目,越不起眼的东西往往就是我们忽略的东西,但却有着非一般的重要性。市赛什么都没有,省赛什么都没有,让我回归到0。所以应该从0开始,要有新的我,为下一年,也是最后一年准备。不说费话了,入正题。

分析:这题是多种方法都能用得上的题目,以前虽然A过,但记忆中用的是暴力,今天要用DP,也是下一题的准备。

设f(i)表示序列中的第1位到第i位的最大子序列和,sum是某一位开始连续到第i-1位的和(和最大子序列和不同),a是原序列数。

f(i)=max{ f(i-1), a(i)+(sum<0?0:sum) }

代码是可以继续优化的,但我没想这样,因为下一题可以多少看到这题的影子。

特别的一点是,这里在第0位引入一个负无穷的点,是不影响结果的,方便两个for变成一个for。

 

Code
posted @ 2009-05-24 22:19  黄浩贤  阅读(726)  评论(0编辑  收藏  举报