T1:先找到能一步飞到n以后的最靠前的点,这个点以后的点都是最多两步就完成的,关键是处理这个点之前的点。
我们设f[i]表示第i个点的最小步数,g[i]表示第i个点一直往右跳的最小步数,那么g[i]=min(g[i+1...i+a[i]])+1,f[i]=min(g[1...i-1]+1,g[i+1...i+a[i]]+1,g[i])。
T2:这题要用dp。设f[i][1..4],1:(选10,下一个一定比它高),2:(选20,下一个一定比它高),3:(选20,下一个一定比它矮),4:(选30,下一个一定比它矮)。只需枚举第一棵树的高度,转移显然。在限定了高矮之后便可以做到无后效性,n为偶数又保证了正确性。
总结:
1、当dp因为某个因素的不确定而导致后效性时,可以通过多增加一些状态来限定不确定因素,从而解决后效性。
T3:找规律+高精度。
第i个集合的长度=第i-1个集合的长度×2-3。
第i个集合的首个数字=2^i-1
第i个集合的第j个数字(j>1)=第i个集合的第j-1个数字+1
总结:
1、以后做题时不能忽略程序结构这一步,程序结构越复杂就要写得越详细。