技术标签: C++ 贪心算法 leetcode LeetCode
给你一根长度为 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。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1
示例 2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
提示:
2 <= n <= 1000
笔记:
贪心的思路。
力扣精选题解
1.需要注意本题涉及到大数,动态规划不可取,怎么都过不了
2.利用贪心算法,经过数论证明一个数若经过分割后乘积最大,必须尽可能多的分成3,其次是2,具体证明详见上面力扣题解的超链接。
3.用到整数快速幂,模板
4.当余数=1和2时,还需要注意返回的值乘上4或者2之后,还需要取余,不然也会超出范围。
代码:
class Solution {
public:
long quickPow(int n,int a,int mod){
long ans = 1;
long res = n;
while(a>0){
if( a & 1 == 1){
ans = (ans*res)%mod;
}
res = (res*res)%mod;
a >>= 1;
}
return ans%mod;
}
int cuttingRope(int n) {
if(n==2)
return 1;
if(n==3)
return 2;
if(n>=4)
{
//求n = a*x+b
int b = n%3;//余数
int a = n/3;//商
if(b==0) //余数为0,即n = 3a,最大乘积=3^a
return quickPow(3,a,1000000007);
else if(b==1) //余数为1,需要分解一个3,变成3+1=2*2,即n = 3(a-1)+4,最大乘积=3^(a-1)*4
return (4*quickPow(3,a-1,1000000007))%1000000007;
else if(b==2)//余数为2,即n = 3a + 2,最大乘积=3^a*2
return (2*quickPow(3,a,1000000007))%1000000007;
}
return 0;
}
};
文章浏览阅读1.1k次。**VulnHub-W1R3S: 1-Walkthrough**靶机地址:https://www.vulnhub.com/entry/w1r3s-101,220/靶机难度:中级(CTF)靶机发布日期:2018年2月5日靶机描述:You have been hired to do a penetration test on the W1R3S.inc individual server ..._vulnhub的w1rs3
文章浏览阅读7k次,点赞5次,收藏48次。python因子分析Factor Analysis (FA) is an exploratory data analysis method used to search influential underlying factors or latent variables from a set of observed variables. It helps in data interpretatio..._python 因素分析
文章浏览阅读927次。人工智能和python是什么关系?人工智能是一个大概念。人工智能项目的具体实施将联系机器学习和深度学习框架。这些框架大多是基于python开发的。因此,为了深入开发人工智能项目,学习python语言也是必要的代码一定要人去写吗,能不能用Python弄个人工智能来写C ?请为我写一个软件。电脑:我能写一百万种软件。你想要哪一个?人:我想写一个聊天工具。电脑:我已经找回了现成的软件微信,可以吗?人民:..._实现python机器学习自动去写小说
文章浏览阅读317次。一、位运算 二、位移运算 三、二进制数以Java中最常使用的int类型为例(32位)。 ㈠ 符号位二进制数最左端的数字为符号位:0代表正,1代表负。㈡ 最大与最小⑴ 1是最小的正整数,符号位为0,最后一位为1,其它全部为0。递增:二进制数右端每次加1(逢2进1),一直到31个非符号位的0全部变为1,得到最大的正整数2147483647。⑵ -1是最大的负整数,符号位为1,其它31位也全部为1。递..._jna 二进制转结构体
文章浏览阅读73次。最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注! 一 申请API key 在使..._百度地图 安卓代码设置key
文章浏览阅读153次。目录0. 引言1. 代码检视的指导思想2. 代码检视的内容3. 回归测试0. 引言代码检视(Code Review)是指软件开发人员在完成代码设计、编写、调试后展开的个人或群体性的代码阅读过程,代码检视的目的是发现代码中的设计问题、格式问题、逻辑问题、语法问题等,从而保证代码的高质量交付。从软件工程的角度讲,在代码检视阶段发现代码问题的成本是低廉的,所以严..._缺陷密度与代码评审行数的关系
文章浏览阅读1.3k次。出租车jt/t 905协议,是jt/t 808协议的一个变种,设计者将部标808协议拿过来,并不是单纯的增加网约车相关的指令集,而且对原有的指令如定位0×0200指令也进行了修改,经过一通剧烈的修改,面目全非,协议已经与808协议本身并不兼容,这是比较失败的地方,保持兼容性,才能使协议更加让硬件和网约车平台接受和开发推广,没有经验的协议设计者和标准制定者高高在上不考虑兼容性,给硬件厂家和平台开发人..._jt808 与 jt905
文章浏览阅读3.4k次。问题:Linux环境下编程时,在读串口时,出现“Resource temporarily unavailable”的错误提示。 原因:串口设置成了非阻塞模式,但是没有用select去判断是否有数据到来就去读。 解决方法: 要么将串口设置成阻塞模式,要么使用select。转载于:https://www.cnblogs.com/nufangrensheng/p/3813298.html..._rmmod: can't unload module 'imx6uirq': resource temporarily unavailable
文章浏览阅读1.3k次。java扑克牌算法java扑克牌算法1、实验内容或题目(1) 请定义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit:face描述一张牌的牌面值(如:"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen..._请定义一个名为card的扑克牌类,该类有两个private访问权限的字符串变量face和suit
文章浏览阅读80次。android控件之WebView控件缩小作者: 字体:[增加减小] 类型:转载 时间:2013-05-16我要评论发现这个控件挺好用,能自已控制进度条,而且这个控件的功能非常壮大,先上个简单的复制代码代码如下:package com.weizhu.lan.view;import com.weizhu.lan.util...._按钮控件实现对webview页面缩放
文章浏览阅读346次。Ajax技术不必刷新整个页面,只对页面的局部进行更新,在前端各方面应用都很多。关于防止重复发送ajax请求,一般是重复点击提交按钮导致重复提交,网上也有很多解决方法,这里写一下我自己用的一个方法。var post_flag = false; //定义一个变量为falsefunction changeInfo(url,data) {if (post_flag) {return false; //如果..._微信 重复请求
文章浏览阅读746次。思路分析:有3种情况第一种情况,当前页面curPage < 4第二种情况,当前页面curPage == 4第三种情况,当前页面curPage>4此外,还要考虑,当前页码 curPage < pageTotal(总页码)-2,才显示 ...首先,先是前端的布局样式<body> /*..._javascript 的动态 html 设置动态页码