http://acm.hdu.edu.cn/showproblem.php?pid=1203
这个就是一个贪心题,我的思路是尽可能选offer获得的成本更低的大学。然后用1减去不可能获得offer的可能性即为结果
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Node
{
int a;
double b;
double p;
}un[10010];
bool cmp(Node a, Node b)
{
return a.p < b.p;
}
int main()
{
int n,m,i;
double nop;
while(scanf("%d%d",&n,&m)&&n||m)
{
for(i = 0; i < m; i++)
{
scanf("%d%lf",&un[i].a,&un[i].b);
un[i].p = (double)un[i].a/un[i].b; //单个百分比的成本比例
}
sort(un,un+m,cmp);
nop = 1;
for(i = 0; i < m; i++)
{
if(un[i].a <= n)
{
nop = nop * (1-un[i].b);
n -= un[i].a;
}
// printf("%.1f %d %d\n",nop,un[i].a,n);
}
printf("%.1f%%\n",(1-nop)*100);
}
return 0;
}