给n个数,n%3==0,求如何组队能有最多队伍拿奖。。。算是暴力枚举吧。。
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
int n,m,a[35],vis[35];
bool check(int x)
{
int l = (n/3-x)*3 + 1,r = n;
mem(vis,0);
while (l<r)
{
int flag = 1;
for ( int i=l+1 ; i<r ; i++ )
{
if ( !vis[i] && 3*a[r]+2*a[i]+a[l]>=m )
{
vis[i] = 1;
flag = 0;
break;
}
}
if (flag)
return false;
vis[l] = 1,vis[r] = 1;
while (vis[l])
l++;
while (vis[r])
r--;
}
return true;
}
int main()
{
int T;
scanf ("%d",&T);
while(T--)
{
scanf ("%d%d",&n,&m);
for (int i=1; i<=n; i++ )
scanf ("%d",&a[i]);
sort(a+1,a+n+1);
int ans = n/3;
while(ans)
{
if(check(ans))
break;
else
ans--;
}
printf ( "%d\n", ans );
}
return 0;
}