这道题最优解是贪心+快速幂。
但贪心算法还必须清楚背后的数学定理才会有思路,没意思。
学习如何用大数BigInteger和快速幂的代码即可。(虽然我没用到快速幂)
注意必须对数组手动初始化,因为不会帮你默认初始化,不手动初始化在n=10时会出错嗯。
1 import java.math.*; 2 class Solution { 3 public int cuttingRope(int n) { 4 BigInteger[] dp =new BigInteger[n+1]; 5 Arrays.fill(dp,BigInteger.valueOf(1)); 6 //dp[2]=BigInteger.valueOf(1);只初始化这个不可以 7 for(int i=3;i<n+1;i++){ 8 for(int j=2;j<i;j++) 9 dp[i]=dp[i].max(BigInteger.valueOf(j*(i-j))).max(BigInteger.valueOf(j).multiply(dp[i-j])); 10 } 11 return dp[n].remainder(BigInteger.valueOf(1000000007)).intValue(); 12 } 13 }
快速幂学习:
https://blog.csdn.net/qq_19782019/article/details/85621386
大整数基本用法:
http://gitbook.net/java/math/biginteger_max.html