传送门:HDU 2570 迷瘴
分析:
注意:
如果百分号小数化去判断 就有精度问题: p-0.000001 > w
贪心策略:先把浓度按从小到大的顺序排列,再一个一个的“贪”,直至贪到所配浓度大于题目中所给的浓度。
代码如下:
#include <stdio.h>
#include <algorithm>
using namespace std;
int main() {
int n,num,v,w,nd[101];
int x,y,i,j,sumV,notR,choose;
double nnd;
scanf("%d",&n);
for(i=0; i<n; i++) {
notR = 0;
scanf("%d%d%d",&num,&v,&w);
for(j=0; j<num; j++)
scanf("%d",&nd[j]);
sort(nd, nd+num);
if(nd[0]>w) {
notR = 1;
goto res;
}
nnd=nd[0]*v;
choose = 1;
for(j=1; j<num; j++) {
if((nnd+nd[j]*v)*1.0/((1+choose)*v*1.0) <= w) {
choose++;
nnd += nd[j]*v;
} else {
break;
}
}
res:
if(notR)
printf("0 0.00\n");
else
printf("%d %.2lf\n",choose*v,nnd/(choose*v*100));
}
return 0;
}