BZOJ-1044 木棍分割

神DP题。。。

 

第一问我们可以用二分答案+贪心解决,答案为Len

第二问我们可以DP解决

设Sum[i]=∑L[1..i],F[i,j]表示在前j根木棍截断i处的情况数。

DP方程:F[i,j]=∑F[i-1,k](Sum[j]-Sum[k]<=Len)

这时我们会发现,空间复杂度O(nm),时间复杂度O(mn^2),都是需要优化的。

空间优化:使用滚动数组

时间优化:当前截断i处时,设状态为F[j]时Mink为k的最小值,而F[j]=F[Mink..j-1],我们会发现,随着j的增加,Mink也是递增的,所以我们可以减少枚举k的时间,降低一维至O(nm)。

简直吓尿QAQ

 

【Code】

 

posted @ 2014-11-26 20:56  NanoApe  阅读(99)  评论(0编辑  收藏  举报
AmazingCounters.com