ZJU2037 Parliament - 乘积最大的整数拆分

题目描述:

给定一整数n(<=1000) ,求一种划分方案使得每一项不同,且乘积最大。

分析:

一看到题直觉告诉我,这个题一定是动态规划。于是一直朝着这个伟大的目标奔了去……

最初想了个n^4的DP,觉得会超时;

改呀改,变成了n^3的DP,应该也没多大希望;

继续改……各位观众,最终弄了个n^2的DP出来!哇哈哈哈哈……

因为超出int范围WA一次后,改成了double,最终结果是以0.16s过掉了~:)

后来在百度一搜,才发现原来可以构造,时间复杂度O(n)……>_<|打击ing

我的垃圾DP不说了,说说我看到的一种构造方法:

求出以2起始的最大连续自然数序列之和sum,使得sum的值不超过输入数n,然后分情况讨论:

设此最大序列为2、3、……、w,则:

1。若剩余值(n-sum)等于w,则最后输出序列为:3、4、……、w、w+2,即将原最大序列每项加1,再将最后剩余的一个1加到最后一项上。

2。若剩余值(n-sum)小于w,则从序列的最大项i开始,从大到小依次将每项加1,直到剩余值用完。

参考资料:http://twins-sbc.spaces.live.com/blog/cns!e464fe74dab33208!569.entry

 

你可能感兴趣的:(百度)