题目描述 有n个盒子,它们的大小和重量相同,但材料的强度可能不同。其中每个盒子都有一个对应的强度x。即这个盒子顶部可以放多少个盒子。 现在要将这些盒子叠放起来,为了节省空间,问这些盒子最少可以放成几堆。 在示例1中,最佳方法是放2 堆:第一堆: 1在顶部,3 在底部,第二堆:仅包含2 输入格式 第一行包含整数n(1<=n<=100) ( 下一行包含 n个整数x1 ,x2 ,...,xn (0<=xi<=100) 输出格式
输出最少需要放几堆。
样例 输入样例 1
3 1 2 3
输出样例 1
2
数据范围与提示 对于100%的数据,1<=n<=100,0<=xi<=100 。
#include<bits/stdc++.h>
using namespace std;
int cnt;
int cmp(int x,int y){
return x>y;
}
int main(){
int n,a[114514];
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
sort(a+1,a+n+1,cmp);
int sum=0;
if(a[1]==0){
break;
}
int p=a[1];
a[1]=0;
for(int j=n;j>0;j--){
if(sum+a[j]<p){
sum+=a[j];
a[j]=0;
}
else{
cnt++;
break;
}
if(j==1&&a[j]==0){
cnt++;
break;
}
}
}
cout<<cnt;
return 0;
}
如果有问题,欢迎大佬指点,这也是帮别人解答的,怕出错