level 3
我的做法是找规律..
首先写一个n!爆搜 发现至少有一个最优方案 满足:
[ 可以由0到n+1的序列分成若干段 各段翻转来得到 ]
然后就可以得到O(n^3)的朴素dp了
f[i]=max{ f[j-1]+w(j,i) : 0<j<=i }
这里w(x,y)=∑(k xor (y+x-k) : x<=k<=y)
这时候再输出最优决策
发现t-n-1一定是f[n]的最优决策 这里t是大于n的[最小的2的整数次幂]
于是对于给出的n 直接找到最优决策一步一步构造出解就好了
O(nlogn)
2013年04月04日 04点04分