http://acm.hdu.edu.cn/showproblem.php?pid=2570 题目就不解释了,都很明白,题目也不难。就是有点卡精度感觉。
思路:就是一个很简单的贪心算法,把每一种药液的浓度减去给定的浓度后进行排序,再从一到n开始循环加入每种药液,直到超过给定的浓度时就停止加入。
#include <iostream> #include<stdio.h> #include<string.h> #include <algorithm> using namespace std; int main() { int n,p,q,r,s,t; int a[100]; scanf("%d",&n); while (n--) { cin>>p>>q>>t; for (s=0;s<p;s++) { cin>>a[s]; a[s]-=t; } sort(a,a+p); r=0; for (s=0;s<p;s++) if (r+a[s]<=0) r+=a[s]; else break; if (s) printf("%d %.2f\n",s*q,0.01*t+r*0.01/s); else cout<<"0 0.00"<<endl; } return 0; }