方法:
贪心,先装大的垃圾。
注意输出格式。
AC代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 100000+100;
struct sta
{
int chance;
int big;
};
bool cmd(int a,int b)
{
return a>b;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int item[maxn];
int n,m;
scanf("%d%d",&n,&m);
sta stt[maxn];
stt[1].chance = 2;
stt[1].big = 0;
int k = 1;
for(int i=0;i<n;i++)
{
scanf("%d",&item[i]);
}
sort(item,item+n,cmd);
int ans = 0;
int sum = 0;
for(int i=0;i<n;i++)
{
int flag = 1;
for(int j=1;j<=k;j++)
{
if(stt[j].chance!=0&&(item[i]+stt[j].big)<=m)
{
stt[j].big += item[i];
stt[j].chance--;
if(stt[j].big==m)
stt[j].chance = 0;
flag = 0;
break;
}
}
if(flag)
{
k++;
stt[k].big = item[i];
stt[k].chance = 1;
}
}
printf("%d\n",k);
if(t)
printf("\n");
}
return 0;
}