首页 > 其他分享 >剪绳子

剪绳子

时间:2023-03-05 22:23:20浏览次数:29  
标签:示例 int 绳子 class 长度 public

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。   示例 1:   输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 示例 2:   输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36 提示:   2 <= n <= 58   解题方法——贪心算法:

 1 class Solution {
 2     public int cuttingRope(int n) {
 3 
 4         //3为最优解所以尽可能的多剪3
 5         //当余数为2时直接乘
 6         //当余数为1时,避免浪费化1+3为4
 7         int a = n/3, b = n%3;
 8         //n<=3时因为m>1所以一刀两断
 9         if(n <= 3) return n - 1;
10             if(b == 2) return (int) Math.pow(3,a) * 2;
11             if(b == 1) return (int) Math.pow(3,a-1) * 4;
12             else return (int) Math.pow(3,a);
13             
14     }
15 }

 

解题方法——动态规划

 1 class Solution {
 2     public int cuttingRope(int n) {
 3         if (n < 4) return n - 1;
 4         int p = 2, q = 3, r = 4, temp;
 5         for (int i = 5; i <= n; i++) {
 6             temp = p;
 7             p = q;
 8             q = r;
 9             r = Math.max(2 * p, 3 * temp);
10         }
11         return r;
12     }
13 }

 

标签:示例,int,绳子,class,长度,public
From: https://www.cnblogs.com/wuli-Zhang/p/17181919.html

相关文章

  • 每天一练(剑指offer)剪绳子
    描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]*k[2]*...*k[m]可能的......
  • 剪绳子问题 之动态规划 及 大数越界情况下的求余问题
    问题:剪绳子剑指Offer14-I.剪绳子-力扣(LeetCode)思路一:数学推导:分割大小为3时,是最优解,2次之; /3作为幂次,  %3作为分解到最后特化处理;特殊化处理:当分......
  • 每日算法之剪绳子
    JZ14剪绳子描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]*k[2]*........
  • 二分-剪绳子
    有N根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对N根绳子进行任意裁剪(不能拼接),请你帮忙计算出这M根绳子最长的长度是多少。第一行包含2个正整数N、M,表示原始绳......
  • P1577 切绳子
    ​​传送门​​思路:用二分对答案mid进行枚举,若按照当前mid进行切割可获得的长度大于k,则l=mid+0.0001,否则r=mid-0.0001,最后用floor向下取整;#include<bits/stdc++.h>using......
  • 剑指Offer-14-剪绳子/力扣-343-整数拆分
    对于一段绳子,第一刀下去可以将绳子分成i和n-i两段,其中i的取值范围为[1,n-1]dp[n]表示n可分成的最大乘积和,dp[n]=max(dp[n],max(i*n-i,i*f(n-i)))初始化:全部初始化为1i......
  • 剑指 Offer 14- I. 剪绳子
    一、题目:给你一根长度为n的绳子,请把绳子剪成整数长度的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]...k[m-1]。请问k[0]*k[1]*...*k[m-1]可能的最大乘......
  • 切绳子
    切绳子思路:运用二分查找,与木材加工题的思路相同。只是这个是针对浮点数的,多了将绳子长度转化为整形,最后输出再转回高精度。代码如下:#include<iostream>usingnames......
  • 切绳子
    直接二分答案,区间的l取0、r取长度和,然后check时对每条长度除以二分的值向下取整,判断是否不小于k就行了。基本是转换成整型进行二分,这里直接对实型进行二分,然后输出时稍微处......
  • 切绳子
    还是按照二分答案的模板写,因为是double类型的,会有精度错误,所以可以先将它们都乘100弄成整数,最后输出时再/100 ......