【17贪心算法】 剪绳子

这题和我之前做的https://www.cnblogs.com/Jun10ng/p/12363679.html
是同一个题目,但是现在多了一个条件 1<=n<=1000
如果还是用dp的话,dp数组就要用大数类BigInteger
但是,还有一种解法,贪心算法

题目

同上

思路

原本打算用大数类的dp数组
但是看了下贪心的解法,也很容易理解
就是一直乘3,

收获

大数类的使用
头文件是 java.math.BigInteger
初始化函数是BigInteger(String类的数字)

代码(贪心)

class Solution {
    public int cuttingRope(int n) {
        if(n == 2) {
            return 1;
        }
        if(n == 3){
            return 2;
        }
        int mod = (int)1e9 + 7;
        long res = 1;
        while(n > 4) {
            res *= 3;
            res %= mod;
            n -= 3;
        }
        return (int)(res * n % mod);
    }
}

原文地址:https://www.cnblogs.com/Jun10ng/p/12369356.html

时间: 2024-10-10 17:09:24

【17贪心算法】 剪绳子的相关文章

【动态规划、贪心】剪绳子

题目 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能的最大乘积是多少? 例如,当绳子的长度是8时,我们把它剪成长度分别为2.3.3的三段,此时得到的最大乘积是18. 输入描述: 输入一个数n,意义见题面.(2 <= n <= 60) 示例1 输入 8 输出 18 示例2 输入 4 输出 4 解答 1,动态规划,从上往下分析问题,从下往上求解:T

从 活动选择问题 看动态规划和贪心算法的区别与联系

这篇文章主要用来记录我对<算法导论> 贪心算法一章中的“活动选择问题”的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题---粗略提下,详细请参考<算法导论> ②活动选择问题的DP(Dynamic programming)求解--DP求解问题的思路 ③活动选择问题的贪心算法求解 ④为什么这个问题可以用贪心算法求解? ⑤动态规划与贪心算法的一些区别与联系 ⑥活动选择问题的DP求解的JAVA语言实现以及时间复杂度分析 ⑦活动选择问题的Gr

面试题14:剪绳子

<?php header("content-type:text/html;charset=utf-8"); /* * 剪绳子 把一根绳子剪成多段,并且使得每段的长度乘积最大. P96 */ //动态规划 function integerBreak1($length){ if($length < 2){ return 0; } if($length == 2){ return 1; } if($length == 3){ return 2; } $products = arr

剑指Offer对答如流系列 - 剪绳子

面试题13:剪绳子 题目描述 给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1).每段的绳子的长度记为k[0].k[1].--.k[m].k[0]*k[1]*-*k[m]可能的最大乘积是多少? 例如当绳子的长度是8时,我们把它剪成长度分别为2.3.3的三段,此时得到最大的乘积18. 问题分析 (1)思路一:动态规划 遇到问题,先分析问题,由分析的结果确定所运用的算法. 一般而言,我们都会在纸上动笔画画,罗列一些基本的情况. 题中说n>1并且m>1,那么 当n

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

五大常用算法之三贪心算法

贪心算法 贪心算法简介: 贪心算法是指:在每一步求解的步骤中,它要求"贪婪"的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解. 贪心算法每一步必须满足一下条件: 1.可行的:即它必须满足问题的约束. 2.局部最优:他是当前步骤中所有可行选择中最佳的局部选择. 3.不可取消:即选择一旦做出,在算法的后面步骤就不可改变了. 贪心算法案例: 1.活动选择问题  这是<算法导论>上的例子,也是一个非常经典的问题.有n个需要在同一天使用同一个教室的活动a

零基础学贪心算法

本文在写作过程中参考了大量资料,不能一一列举,还请见谅.贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关.解题的一般步骤是:1.建立数学模型来描述问题:2.把求解的问题分成若干个子问题:3.对每一子问题求解,得到子问题的局部最优解:4.把子问题的局部最优

贪心算法练习(一)

贪心算法_删数问题 AYYZOJ p1420 删数问题,算法在上一篇中讲得很详细,注意最后输出数前的零要去掉. 1 var n:string; 2 s,i:integer; 3 begin 4 readln(n); 5 readln(s); 6 while s>0 do 7 begin 8 i:=1; 9 while(i<length(n))and(n[i]<=n[i+1])do inc(i); 10 delete(n,i,1); 11 dec(s); 12 end; 13 while

贪心算法(发工资)

发工资咯:) Problem : 430 Time Limit : 1000ms Memory Limit : 65536K description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵 但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? 这里假设老师的工资都是正整数,单位元,人民币一共有100