贪心法,同白书例题中的二人乘船问题
#define UVa "8-1.1149.cpp"
char fileIn[30] = UVa, fileOut[30] = UVa;
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
//Global Variables. Reset upon Each Case!
const int maxn = 100000 + 10;
int T, n, l, sticks[maxn];
/
int main() {
scanf("%d", &T);
for(int kase = 0; kase < T; kase ++) {
if(kase) printf("\n");
scanf("%d%d", &n, &l);
for(int i = 0; i < n; i ++) scanf("%d", &sticks[i]);
sort(sticks, sticks + n);
int p1 = 0, p2 = n-1, ans = 0;
while(p1 <= p2) {
if(p1 == p2) {
ans ++;
break;
}
else {
int s1 = sticks[p1], s2 = sticks[p2];
if(s1 + s2 <= l) {
ans ++;
p1 ++;
p2 --;
}
else {
ans ++;
p2 --;
}
}
}
printf("%d\n", ans);
}
return 0;
}