当 当 当 当 ~~
没错,又是算法课作业 (╯︵╰)
问题描述:
输入:整数序列 a1, a2 … an
输出:序列的一个连续子段,使该子段和最大,输出最大子段和
当所有整数都为负数时,定义最大子段和为0
语言:c++
若要输出连续子段,见链接(眼神不好,交作业才读懂题):
http://blog.csdn.net/sunshine__0411/article/details/78484960
关于动态规划:
首先确定的是使用动态规划的思想编写算法,动态规划是一个多阶段决策问题。假设事件在初始状态后需要经过n个这样的阶段。从i阶段发展到i+1阶段可能有多种不同的途径,而事件必须从中选择一条途径往前进展。在两个阶段间的选择发展途径的行为称为一次“决策”。事件的发展过程之中需要做n次决策,这些决策就构成了事件整个发展过程的一个决策序列——这一过程称为多阶段决策过程。
划重点:对任意的i,阶段i以后的行为仅依赖于i阶段的状态,而与i阶段之前,过程如何达到这种状态的方式无关。
思路分析:
int n; int a[n] //存储待计算序列an
想办法把an这个序列串起来,每个状态仅依赖于之前的状态。
定义一个int max //保存最大值
定义一个答案数组ans[n](其实后来发现可以不用这个数组,都是后话。后话。。。)