解法一:贪心
此题要把绳子切成m段,求最大乘积。很直观的就是,要尽量相等的绳子才能有更大的乘积。关键是要切成多长的。
从这个题解中,我们可以看到,切成3的就很好。这是从5开始的情况,3-4由于没法切3,或者切3不是最好,要用2切,而2需要用1切,这些特殊情况处理好就没问题了。值得注意的是,e真是个神奇的数字。
class Solution {
public:
int cuttingRope(int n) {
if(n<=3)return n-1;
int div = 3;
if(n<5)div = 2;
int total = n/div;
if(n-total*div == 1)total -= 1;
if(n==total*div)return int(pow(div, total))