PKU 1036

http://acm.pku.edu.cn/JudgeOnline/problem?id=1036

分析:重点在于,状态变化可以有 0 ,-1 ,+1.

所以t0在 t时间内的状态变化量可以是 [t0-t:t0+t];

根据时间排序,状态方程

ans[i]=max(ans[k])+col[i].p;    (0<=k<i,且(col[i].t-col[k].t>=|col[i].s-col[k].s|))

虽然是很简单的DP

但是,由于我把数据存在 1——N中。。col [0]各项都设为0.排序的时候要sort(col,col+n+1,comp);多次忘记加1。。囧

但还是WA ,

原因很简单,我把ans[i](0 <=i<=n)都初始为0,MAX也初始化为0,在判断某个项是否可取时,发生了错误。

因而把ans[i]初始化为-1 MAX=0。从而判断某个项是否可取

或者,只初始化ans[0]=0. MAX初始为-1,如果ans[i]不可取,就等于-1。

AC 复杂度:O(n^2)

状态量为p[i].

状态转移的边界条件为时间(重点)。而且数据比较小。(n<100,)

明显T<30000不是状态量

 

拓展:跟最长单调递增子序列想法基本一致。。。细节方面需要注意

但是我的比较费时间,,想起最长单调递增子序列有(nlog n)的算法,于是琢磨。

用b[k]记录长度为K的子序列的最小元素

这是基于子序列的单调性质的,,然后用二分

可是这道题。。好像没有单调性质哦。。,

琢磨不出 希望大牛们赐教!!!!

 

posted @ 2010-03-24 21:24  吴豆豆  阅读(180)  评论(0编辑  收藏  举报