CF 380 Div2 F题

 两个人轮流操作,一个人想要差最大,另外一个想最小,然后最简单的方法是f[l][r][k][flag]表示还剩[l,r]这个区间还没有选,只能选k和k+1,flag为0或1,时的最优值。

传统的这种表示方法状态量非常大,其他思路又感觉不明显,我该怎么办?

仔细观察,好像这样表示会很浪费空间,因为当flag为1时l+r-1>=n,当flag为0时l+r-1<=n,并且abs(l+r-1-n)的值很小,设为t吧,t就大概是根号n的样子,那么我们的每一个(l,r,k,flag)就可以相应地表示成f[l][t][k][flag]了,总的状态数大概是n平方,还能够接受。

技巧:先想一个比较直接的方法,然后就对这个方法进行一定的优化,包括状态数的压缩,转移的加速,这题就是找规律,发现总的状态数很少,然后用另外一种表示方法来代替原来的方法从而用相同的方法来做出正确的答案。观察到l和r这两维是比较浪费空间的是很关键的,把r压缩为用l和一个较小的t来表示的值。

posted @ 2016-12-20 10:28  fjhok  阅读(109)  评论(0编辑  收藏  举报