2 5 2 3.2 4 4.5 6 10 1 2 3 1 2 1.2 3 1.1 1 2
2 5
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int cmp(double a,double b)
{
return a>b; //从大到小排序
}
int main()
{
int n,m,j,i;
double a[610];
double sum,r;
scanf("%d",&n);
r=sqrt(20*20+2*2)/2; //当总半径大于等于对角线的一半时可覆盖全部
while(n--)
{
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%lf",&a[i]);
sort(a,a+m,cmp);
for(i=0;i<m;i++)
{
if(a[i]<=1) //半径为一无法覆盖全部
break;
sum+=a[i];
if(sum>=r)
break;
}
sum=0; //注意清零
printf("%d\n",i+1);
}
return 0;
}
原文:http://www.cnblogs.com/tonghao/p/4357490.html