求一道站外题
查看原帖
求一道站外题
494192
ChickenDrinkingMilk楼主2021/11/19 14:29

有N个苹果排成一行,重量分别是w1,w2,w3,…,wn。现在要把它们按照次序装进相同规格的箱子里,每个箱子最多可以装M重量的苹果,问最少要几个箱子把所有苹果装起来?

这个问题显然可以贪心算法解决:每次一个一个放苹果,直到放不下,就增加一个箱子。

如果问题反过来,知道现在要定制K个箱子,问箱子的规格最小是多少(即箱子的重量限制最小是多少),才能把所有苹果装起来?

输入格式 第一行2个正整数:N和K。N表示有多少苹果,范围[1, 100000];K表示定制的箱子数量。

第二行有N个数,表示每个苹果的重量,范围[1, 1000]

我代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,sum,a[100001];
bool pd(int x){
	int sl=0;
	for (int i=1;i<=n;){
			int s=a[i];
			while (s+a[++i]<=x);
			sl++;
	}
	if (sl==k) return 1;
	else return 0;
}
int find(){
	int l=1,r=sum;
	while (l<r){
		int mid=(l+r)/2,sl=0;
		for (int i=1;i<=n;){
			int s=a[i];
			while (s+a[++i]<=mid);
			sl++;
		}
		if (sl>=k) l=mid+1;
		else r=mid-1;
	} 
	return r;
}
int main(){
	cin>>n>>k;
	for (int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
	}
	cout<<find();
	return 0; 
}

为啥只得了20?

2021/11/19 14:29
加载中...