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的子序列的最小元素
这是基于子序列的单调性质的,,然后用二分
可是这道题。。好像没有单调性质哦。。,
琢磨不出 希望大牛们赐教!!!!