yysy 这种题想出来真的爽。
题解 #
这道题有很多不同的 dp 方法。这里我将描述一下我认为比较标准的方法。当然有更短的做法但是也看不懂啊 QAQ。
首先定义一下 dp 状态,设dpi,j为前 i 个数的答案并且最后一个选的数的下标是i−j。
通过观察不难发现如果i是奇数,那么 j 最大是 2,否则 j 最大是 1。这点可以通过取1,3,5,…的数来验证。
现在我们可以考虑状态转移了。如果i是奇数,那么选的数的个数和i−1是一样的。所以dpi,j应该等于dpi−1,j−1除了dpi,0,因为ai在计算dpi−1,j的时候并没有被考虑到,所以dpi,0应该从dpi−2,j转移过来。以下是状态转移方程:
当i为偶数,要比i−1多选一个数,想法基本类似。状态转移如下:
dpi,0dpi,1dpi,2=max(dpi−2,0,dpi−2,1,dpi−2,2)+ai=dpi−1,0=dpi−1,1
dpi,0dpi,1=max(dpi−1,i,dpi−1,2)+ai=dpi−1,2+ai
Code #