HDU1009——FatMouse' Trade
2009-04-25 23:02 Logic0 阅读(410) 评论(0) 编辑 收藏 举报http://acm.hdu.edu.cn/showproblem.php?pid=1009
贪心,按照j[i]/f[i]从大到小排序,依次贪心选择即可。这里判断了f[i]为0的情况。
#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct
{
long j,f;
double p;
}NODE;
bool compare(NODE a,NODE b)
{
return a.p > b.p;
}
int main()
{
long m,n;
cin>>m>>n;
vector<NODE> s;
while(m!=-1&&n!=-1)
{
int i;
NODE tmp;
for(i= 1;i<=n;i++)
{
cin>>tmp.j>>tmp.f;
if(tmp.f == 0)
tmp.p = 1001.0;
else
tmp.p = (double)tmp.j/tmp.f;
s.push_back(tmp);
}
sort(s.begin(),s.end(),compare);
vector<NODE>::iterator mb = s.begin();
double res = 0.0;
while(m>0 && mb!=s.end())
{
if((*mb).f <= m)
{
res += (*mb).j;
m -= (*mb).f;
}
else
{
res += (double)m / (*mb).f * (*mb).j;
m = 0;
break;
}
mb++;
}
s.clear();
printf("%.3lf\n",res);
cin>>m>>n;
res = 0.0;
}
return 0;
}
有个很诡异的问题,不知道为什么,tmp.p = (double)tmp.j/tmp.f;写成tmp.p = (double)tmp.j/(double)tmp.f;就会WA。至今不知道为什么,有待研究。