题解:B4228 [常州市程序设计小能手 2024] 盒子
题面
思路
根据题意易得,先装小盒子最划算,而且套娃是允许的,所以被装的盒子也要尽量小。
所以可以先排序,开一个
最后遍历一遍标记数组,如果这个盒子没被标记答案就
但其实可以优化掉这个标记数组,在遍历盒子时记录也是可以的。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n;
int a[N],cnt[N];
int ans;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
int j=i+1,flag=0;
while(j<=n){
if(a[j]/2-cnt[j]>=a[i]){
cnt[j]+=a[i];
flag=1;
break;
}
j++;
}
if(!flag) ans++;
}
cout<<ans;
return 0;
}