题意:
解法:
将所有数从大到小开始放,有空隙就放,
用堆存每一行的剩余空间,如果放不下了就添加一行.
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=1e6+5;
int a[maxm];
int n,W;
void solve(){
cin>>n>>W;
for(int i=1;i<=n;i++){
cin>>a[i];
}
priority_queue<int,vector<int>,less<int> >q;
sort(a+1,a+1+n);
for(int i=n;i>=1;i--){
if(!q.size()){
q.push(W-a[i]);
}else{
if(q.top()>=a[i]){
int x=q.top();q.pop();
q.push(x-a[i]);
}else{
q.push(W-a[i]);
}
}
}
cout<<q.size()<<endl;
}
signed main(){
ios::sync_with_stdio(0);
int T;cin>>T;
while(T--){
solve();
}
return 0;
}