算法笔记之木棒切割问题

<<算法笔记>>p134页

算法笔记之木棒切割问题_第1张图片

问题分析:

此题的核心在于在满足切割后木棒数目符合要求外,求木棒的长度最大取值,这里很容易错解成一个符合条件的长度,并不是最大长度。

那么思考一下,这里的木棒最大长度代表着什么意思呢?

可以理解成 MaxL+1 一定导致木棒数目至少K-1。
MaxL-1可能会导致木棒数目至少K+1,也可能数目不变为K。

因此这个求MaxL的问题,可以解释成为求 K-1木棒数目所需L,再让L-1,就得到了我们索要的最大长度MaxL。如果有疑问请往下面看,这是一个类型的解题方式。

代码:
 

#include 
int N; //N个木棒
//最长的木棒 
int Max(int arr[]){
	int max=0;
	for(int i=0;imax){
			max=arr[i];
		}
	}
	return max;
}
//计算切割后小木棒总数 
int f(int arr[],int L){
	int sum=0; //切成sum个小木棒 
	for(int i=0;i

代码总结:
emm某些部分写得比较外行,但是问题不大,核心问题是写清楚了的。
这里我最想说的是,这个问题被转换为了一类问题:第一个满足条件的元素问题

有两个简单的例题大家可以拿去参考:
二分法经典例题

你可能感兴趣的:(二分)