切绳子啊啊啊

2024-04-13 11:38
文章标签 绳子 啊啊啊

本文主要是介绍切绳子啊啊啊,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、描述
  • 2、关键字
  • 3、思路
  • 4、notes
  • 5、复杂度
  • 6、code

1、描述

给你一根长度为 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

来源:力扣(LeetCode)
链接
参考答案
数据量更大的一个
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、关键字

整数长度,剪成整数,段数未定。

3、思路

思路一:动态规划,
前面的直接写出来结果,后面如果用到dp也是从下标4之后才是统计的答案的。
思路二:数学中的均值不等式。按照长度3,一点一点的切分,
如果数字太大让取余,就多个位置多取几下
列举几下结果:
2只能分成 1 + 1
3 --> 2 + 1
4–> 2 + 2
5–> 3 + 2
6–> 3 + 3
7–> 3 + 2 + 2
8–> 3 + 3 + 2
可以看出能分成3,就不要分成2,观察可以看出来 5 这个是一个分界点。

4、notes

一开始就会觉着有很多种方式,但是肯定是最相近得到的乘积最大。

5、复杂度

时间:O(1)仅有求整、求余、次方运算,
资料提到不超过机器数的整数可以看作是 O(1);
空间:O(1)

6、code

方法2:均值不等式

class Solution {
public:int cuttingRope(int n) {if(n <= 3) return n-1; // 2->1,3->2 , 4-> 4 , 5-> 6else if(n == 4) return 4;int res = 1;while(n >= 5){res *= 3;n -= 3;}return res * n;}
};另外一个更大的数字:
class Solution {
public:int cuttingRope(int n) {if(n < 4) return n-1;else if(n == 4) return 4;long res = 1;   // 这里int --> long while(n >= 5){res = res %1000000007;  // res *= 3;res = res %1000000007;  // n -= 3;}res = res * n;res = res %1000000007;  // return res;}
};

dp

class Solution {
public:int cuttingRope(int n) {if(n <= 3) return n-1; // 如果是小于等于3,就直接给出答案,vector<int> dp(n + 1, 1);dp[1] = 1;dp[2] = 2;dp[3] = 3;for(int i = 4; i <= n; i++){  // dp数组中存的答案是得等到dp[4]之后才是!前边几个都是为了计算后边的for (int k = 2; k < i  ; k++){  // 从线段长度大于等于2才切dp[i] = max(dp[i], dp[i - k] * dp[k]);  // 把当前值i,前面所有的结果都遍历一遍。}}return dp[n];}
};

这篇关于切绳子啊啊啊的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900039

相关文章

OpenGL/GLUT实践:弹簧-质量-阻尼系统模拟摆动的绳子和布料的物理行为(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 一维弹性物体模拟2.1.1 质点类(Mass)2.1.2 弹簧类(Spring)2.1.3 模拟类(RopeSimulation)2.1.4 openGL实现 2.2 二维弹性物体模拟2.2.1 模拟类改进(1) Simulation1 类(2) ClothSimulation 类 2.2.2 o

每日错题(已经红温,气死我了,啊啊啊啊啊啊)

总共用2^n中可能,但是我tm的,就想着贪心了,woc,真的啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。  Problem - D - Codeforces 题解地址 思路,对于n个牌子,有相同的牌子必然是不能再一起的。这里想到二分图。用染色法判断二分图。 E. Split Into Two Sets(ranting 1600)超详细题解-CSDN博客 #include <bits/stdc++.

Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]

本文继上篇文章http://t.csdnimg.cn/rrsIL继续介绍GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,目前博主处于有一点基础的状态。         文章的主要介绍了依旧非常重要的结构tinkter库、重要组件简介(这个不用死记硬背 用的时候再说)、Text(多行文本框)、Radiobutton、Checkbutton、Can

剪绳子(动态规划和贪婪算法)

题目: 把长度为n的绳子剪成m段(n>1,m>1),每段绳子的长度记为k[1],...k[m],则每段绳子的长度的最大乘积是多少?例如身子长度为8时,剪成2,3,3三段得到的乘积最大,为18。 思路: 方法1:动态规划的思想 假设长度为n的绳子被剪成若干段后,各段长度的最大乘积为f(n)。一刀下去可能的位置有1,2,...,n-1,j将绳子分为长度为i和n-i的两段,则f(n)=max{f

百度笔试题:绳子最多覆盖多少个点

版权所有。所有权利保留。 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/17123711 百度笔试题: 数轴上从左到右有n个点,a[0] ,a[1],…,a[n-1],给定一根长度为L绳子,求绳子最多覆盖其中几个点?

博弈---ZOJ 2083 Win the Game(染绳子)

原题:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2083 大意:两个人分别对n条绳子染 每次染m长 最后染不下的输,问先手胜负 思路:每一条绳子看做一个子问题(求每个绳子的SG再异或就是整个事件的SG),每条绳子 染的m的段 左右两端各一段, 分别求这左右两端的SG再异或 通过SG打表或递归求出整个绳子的各地方的

6.11啊啊啊啊啊啊啊

#include <iostream>   using namespace std; class Animal{ public:     virtual void perform(){         cout << "讲解员巴拉巴拉" << endl;     } }; class Lion:public Animal{ public:     virtual void perform(){

我只好去找了一根绳子系着它的脖子

我特别感动的生活 今天的我特别感动的生活,我觉得他的一生很不幸,嘴后悔莫及,叫它跟上我走,耳朵感慨地说,我只好去找了一根绳子系着它的脖子拖着它向小店走去,我们又怎么会受这些苦呢,眼睛也说,还有双足飞龙和科多兽(我就是这么认为的),为更多的广大市民服务。 巨魔为代表的兽族骑着各色怪兽,这不人类和巨魔吗,然后再一看主人公,主人病倒后就不能再看电视了,虽然外域时代已经过去一年多了,商家们,我就又想

java编程之计算3000绳子每天剪一半,绳子短于5米需要时间

/**假如有一条绳子长3000米,每天减去一半,请问需要花费几天时间,绳子的长度会短于5米?**/class time{public static void main(String args[]){double length=3000; //初始化变量int day=0; while(length>5){ //while循环,当绳子长大于5时,执行一下语句l

编程题:剪绳子

题目: 给一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1且m>1,2 ≤ n ≤ 60),每段绳子的长度记为k[0],k[1],…,k[m-1]。请问k[0] * k[1] * … * k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 输入示例: 8 输出示例: 18 规定: ①输入给了