木棒切割问题首先需要理解,是否可以有多个解,就{10、24、15}来说本问题只有唯一解6,做本问题时可以考虑问题只有一解的情况
那么可以采用计数的方法,判断在何时取得七段相同的解,问题转换为二分法的常规写法。
注意本题的mid是在函数的最后取中的,因为可能会遇到只要一段的
代码如下
#include<cstdio>
#include<iostream>
using namespace std;
int solve(int a[],int n,int right,int K)
{
int left=0,mid=right;
while (left<right)
{
int num=0;
for (int i=0;i<n;i++)
{
num+=a[i]/mid;
}
//printf("%d",num);
if(num==K)
return mid;
else if(num<K)
right=mid;
else
left=mid;
mid=(left+right)/2;
}
return 0;
}
int main()
{
int n,k=0,K,max=-1,a[10];
cin>>n>>K;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if (max<a[i])
max=a[i];
}
printf("%d",solve(a,n,max,K));
}