解决后效性。。最大子序列和扩展。。

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 ,,,

 

 

 

posted @ 2010-03-26 20:45  吴豆豆  阅读(462)  评论(0编辑  收藏  举报