本题的数据严重过水,包括大样例和民间数据在内,对 DP 的边界都没有仔细的卡。
这是我的 错误 AC 记录
这是我(大抵是)正确的 AC 记录
如果你仔细对比两份记录,你会发现我只改了这里:
--- old
34: chkmax(f[i][0], std::max(f[j][0], f[j][1]) + sum(j, i - 1) + a[i]);
--- new
34: chkmax(f[i][0], std::max(f[j][0], f[j][1]) + sum(j + 1, i) + a[i]);
但这一点点的差距是对 DP 状态设计的完全的误解,结果这两种做法都 AC 并通过了 CCF 大样例。
可以预见的是,官方数据估计都未必会卡错误的做法(大样例都没卡到),但在我发完这个帖子之后就未必了。
本人考场做法就是错误做法,主打一个刀口向内。