算法笔记二分法切木棒

mac2026-06-20  0

问题:给出N根木棒长度已知但不一定相等, 现在希望通过切割得到长度相等的K根木棒,求长度相等的K根木棒最长是多少?

如:给3根木棒,长度为10, 24, 15,要切割得到7根长度相等的木棒, 则7根木棒的长度最长为6,其组合为16+46+2*6。 分析: 二分法处理问题 ,左右边界为最小解和最大解,mid为当前解

#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; const int maxn=10010; int main() { int a[maxn];//存放木棍 int n,k;//木棍数,要切出的木棍数 scanf("%d%d",&n,&k); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); int left=0,right=a[n-1],mid; while(left+1<right) { int sum=0; mid=(left+right)/2; for(int i=0;i<n;i++){ sum+=a[i]/mid; } if(sum>=k){ left=mid; } else{ right=mid; } } printf("%d\n",left); return 0; }
最新回复(0)