这道题可以用贪心算法来实现,对所有物品的长度进行排序,然后先看当前最短的和最长的能否装进一个袋子里,如果不能,这个当前最大的物品要单独放一个袋子,如果可以,将这两个物品放一个袋子,然后i++;j--;重复上述操作。
#include<bits/stdc++.h> using namespace std; const int maxn = 100000 + 5; int T,n,l,a[maxn]; int main(){ scanf("%d",&T); while(T--){ scanf("%d%d",&n,&l); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); int ans = 0; for(int i=0,j=n-1;i<=j;){ if(a[i]+a[j]>l) { j--; ans++; } else { j--; i++; ans ++; } } printf("%d\n",ans); if(T) printf("\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/weizhuwyzc000/article/details/46758041