考试的时候这道题直接看错了题意,后来看懂了之后就直接不会做
因为是$Fibonacci$,所以考虑$DP$
可以设$F$$[$$i$$]$$[$$j$$]$为以$C$$[$$i$$]$为当前数,以$C$$[$$j$$]$为当前倒数第一个数的最大长度
我们可以考虑枚举$i$、$j$、$k$
如果$C$$[$$i$$]$$=$$C$$[$$j$$]$$+$$C$$[$$k$$]$
那么转移合法,$F$$[$$i$$]$$[$$j$$]$$=$$max$$($$F$$[$$i$$]$$[$$j$$]$$,$$F$$[$$j$$]$$[$$k$$]$$+$$1$$)$
但是这样的复杂度就是$O$$($$n^3$$)$的,那么考虑优化
如果枚举$i$、$j$,那么$C$$[$$k$$]$$=$$C$$[$$i$$]$$-$$C$$[$$j$$]$是固定的
这里可以离散化和二分查找,时间复杂度是$log$级别的
然后再用$G$$[$$j$$]$$[$$i$$]$表示对于$C$$[$$k$$]$的最大值即可
那么总时间复杂度就是$O$$($$n^2$$logn$$)$的
1 |
|