/*
HDOJ 1203
典型的贪心,类似于01背包和部分背包的中间类型
*/
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
struct School
{
int a; //申请费用
double b; //录取概率
double scale; // b/a
};
bool cmp(const School &a,const School &b)
{
return (a.scale > b.scale); //按照scale降序排序
}
int main()
{
School of[1000],su[1000];
int n,m,k;
double success;
while(cin>>n>>m)
{
if((n == 0) && (m == 0))
break;
for(int i=0;i<m;i++)
{
cin>>of[i].a>>of[i].b;
of[i].scale=of[i].b/of[i].a;
}
sort(of,of+m,cmp);
success=1.0;
k=0;
for(i=0;i<m;i++)
{
if(n >= of[i].a)
{
n-=of[i].a;
su[k]=of[i];
k++;
}
}
for(i=0;i<k;i++)
success *= (1-of[i].b);
success=(1-success)*100;
cout<<setiosflags(ios::fixed);
cout<<setprecision(1)<<success<<"%"<<endl;
}
return 0;
}
Greedy——HDOJ 1203
最新推荐文章于 2020-02-18 13:38:46 发布