`
feiliboos
  • 浏览: 665768 次
文章分类
社区版块
存档分类
最新评论

[HAOI2008]木棍分割

 
阅读更多

这道题磨了我好久……

第一问可以二分出来,对于每个答案,贪心的分割,最后分割出来的段大于m+1的话就不行,这样的

第二问比较麻烦

有这样一个DP方程:

记前缀和为s

f[i][j]=sigma(f[i-1][k])(s[j]-s[k]<=limit)

f[i][j]表示把前j根木棍分割成i段的方案数

那么,暴力算的话复杂度是O(mn^2),TLE无疑

我一开始没有注意到题目性质,如果单看DP方程,是想不到什么好的方法的

经pty提醒发现,由于s这个函数是前缀和,因此k的最小值满足单调性,即随着j的递增,k的最小值单调不减

然后记g[i]为f[i]的前缀和函数,即g[i][j]=sigma(f[i][k])(k=1...j),f的值就等于两个g相减,可以O(1)求

这样对于每一维是线性的,复杂度优化至O(mn)

实际操作时不需要开二维,f也只能开滚动……


第一次提交:MLE,忘记开滚动……

第二次-第n次提交:wa,因为方便取模写了个inc函数,结果顺便把前缀和也取模了……

第n次-第m次提交:wa,贪心分割的过程写wa了……没计算最后一段……

我就是个傻×……不是学clj装B,是真正的那种……




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics