[题目大意]
  • 给定一个数列,求从中选取一个值最大的子序列(不必连续,但要求按顺序),求值的方式是,加上你选取数列中奇数位的数,减去偶数位的数。
  • 数都是正的(当然也可以没有这个限制)
  • 哦...特别注意N<=150000

[分析题解]
  •  写这道题目的题解完全不是因为这道题很难,而是这道题非常的有趣。做了很多最大子序列的变形,比如要求XOR和最大之类的,但是这次这个奇偶不同也很有意思
  • 我们可以将奇偶拆分为两列,然后限制只能在这两列之间进行转移。形象的说,就是把这个数列表示为不断在两列交叉选数的一条“路径”。然后特别设置一下边界就可以了。

[个人代码] http://fayaa.com/code/view/26760/ 

[启发总结]
  1.  然后我忽然想起了以前做的一道图论题目:给定一张图,对边加一个限制条件,就是有的点只在奇数时刻开放,有的店只在偶数时刻开放,还有全天开放的,求最短路。这样只需要用dis[i,j]其中j=1或是0来表示在i的奇数、偶数时刻的最短路即可。
  2. 我们可以对这个做更多的推广,比方说:给定一些无符号32位整数,要求选取一个子序列,使得对于奇数项XOR其本身,偶数项XOR其反码,其最大XOR值?个人认为拆分同样可以解决。
  3. 再鬼畜一些:给定一张图,求最大权闭合子图,但是每一个点有两个值,当子图中含有奇数个点时...偶数个点时...这个-_-求解-_-
  4. 算了-_-
  5. 鬼畜容易治愈难-_-
  6. 比较通用的方法就是分类讨论了,试着将其分为两类数据,然后进行数据之间的转移。遇到再说吧-_-

相关文章: