2021年9月14日22:31:52
动态规划
res代表 i时 的 最大值
i为1,2,3 时 不分割 最大值 为1,2,3
为什么是 j<= i/2 因为 大于时 重复算了一遍 2,8 -> 8,2
public class Solution { public int cutRope(int n) { if(n<4) return n-1; int[] res = new int [n+1]; res[1] = 1; res[2] = 2; res[3] = 3; for(int i = 4;i<=n;i++){ for(int j = 2;j<= i/2 ;j++){ res[i] = Math.max(res[i],res[j] * res[i-j]); } } return res[n]; } }
贪心
public class Solution { public int cutRope(int n) { if(n <= 3) return n - 1; int a = n / 3, b = n % 3; if(b == 0) return (int)Math.pow(3, a); if(b == 1) return (int)Math.pow(3, a - 1) * 4; return (int)Math.pow(3, a) * 2; } }