解决后效性。。最大子序列和扩展。。
PKU 2181 http://acm.pku.edu.cn/JudgeOnline/problem?id=2181
给一个序列,从头走到尾,可以跳过某些点
刚开始的 T=0走一步T +1
当走到某个点的时候
T为偶数,就减去某个点的值
T为奇数,就加上某个点的值
求走完序列的最大值
分析:
每个点都有三种可能
1)不走=====不走的时候相当于把这个点忽略掉,
2)偶数时间走====偶数时间走,那上一个“走的点”的时间必须选为奇数
3)奇数时间走====,那上一个“走的点”的时间必须选为偶数
满足最优子结构:
长度为 N 的最优解
[N][0]=MAX([N-1][0],[N-1][1]-COL[N]);(0表示偶数时间)
[N][1]=MAX([N-1][1],[N-1][0]+COL[N]);(1表示奇数时间)
总结
:一般的最大子序列,。没有分偶数,奇数时间的,,满足DP的无后效性,可以直接一维过去
但是,加入了偶数,奇数时间的限制后,不满足DP的无后效性了。最一般的解决方法就是加多一维表示时间的奇偶性。消除后效性.OK ,,,