题目大意:给定n个物品的重量,无限个容量为m的箱子,每个箱子最多装两个物品,要把所有的物品都装下,最少需要多少个箱子。
题目分析:贪心策略:每次将最重和最轻的两个物品放到一个箱子里,如果装不下,则将最重的单独装到一个箱子里。
代码如下:
# include<iostream> # include<cstdio> # include<cstring> # include<algorithm> using namespace std; int a[100005]; int solve(int n,int m) { int l=0,r=n-1,ans=0; while(l<=r){ if(a[l]+a[r]<=m) ++l,--r; else --r; ++ans; } return ans; } int main() { int T,n,m; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<n;++i) scanf("%d",a+i); sort(a,a+n); printf("%d ",solve(n,m)); if(T) printf(" "); } return 0; }