| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| FatMouse' Trade | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-06 13:49:23 | 输入超时(0) |
初始m金钱,给出n个交易,分别是用Ji金钱换取Fi商品,问最终能获得的最大商品数量(商品可无限分割),即部分背包问题。
| 1009.cpp代码已折叠
展开折叠内容
|
|---|
#include<cstdio>
#include<iomanip>
#include<algorithm>
using namespace std;
class trade{
public:
double require,provide;
friend bool operator <(const trade &a,const trade &b)
{
return a.provide/a.require>b.provide/b.require;
}
bool Trade(double &M,double &ans)
{
if(M>=require&&provide>require)
{
M-=require;
ans+=provide;
return 1;
}else{
ans+=M/require*provide;
M=0;
return 0;
}
}
} p[1000];
int main()
{
while(1)
{
int n;
double m,a,b,ans=0;
scanf("%lf%d",&m,&n);
if(n<-.5&&m<-.5)
return 0;
for(int i=1;i<=n;++i)
scanf("%lf%lf",&p[i].provide,&p[i].require);
sort(p+1,p+n+1);
for(int i=1;i<=n;++i)
{
if(!p[i].Trade(m,ans))
break;
}
printf("%.3lf\n",ans);
}
}
|