很简单的一道关于贪心算法的题目,不过提交的时候还是出了点问题,第一次WA了,然后就把所有float型变量换成了double型,这样就过了,话说精度问题真心伤不起!代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef struct food{
double j,f;
double value;
}t;
bool cmp(t a,t b)
{
return a.value<b.value;
}
t a[100000];
int main()
{
int m,n,i;
double sum;
while(cin>>m>>n&&m!=-1&&n!=-1){
sum=0;
for(i=0;i<n;i++){
cin>>a[i].j>>a[i].f;
a[i].value=a[i].j/a[i].f;
}
sort(a,a+n,cmp);
for(i=n-1;i>=0;i--){
if(m<a[i].f) break;
else {m-=a[i].f;sum+=a[i].j;}
}
if(i>=0)
sum+=(a[i].j*m/a[i].f);
printf("%.3f\n",sum);
}
return 0;
}