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