Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
32ms AC 思路与优化思路在网上随处可见,引用最多的是chenyajun大牛的文章: http://www.chenyajun.com/2010/05/24/4830 参考大牛的代码,谈一谈优化(大牛已经做的就不提了)。 首先,2维DP开2维数组是没有必要的,因为后一行的计算结果之间没有依赖性,因此在自己身上进行更新即可。迅速把O(n^2)空间变成O(n)。 其次,内层循环中的判断可以省去,因为当且仅当j大于i的时候会出发,因此把j的初值设为i+1即可。 然后,当n>m时,很简单就是直接的整数划分问题,与n无关(相当于划分的前面用0补齐)。用http://www.mathpages.com/home/kmath383.htm 给的p(n) = SUM (-1)^(k-1) p(n - k(3k+-1)/2)可以在O(n^(3/2))时间内计算出结果。 最后,因为当n*2+1>=m>m时,可以推知dp[n][m]=dp[n][n]-sum(dp[n][i],{i,1,m-n-1})-1,因此这种情况可以也可以用O(m^(3/2))计算出dp[n][m]。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator