题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1009
本题作为贪心的基础题,很简单,并且本人认为结构体排序最形象直观,但是在做题的时候要注意0 1 和1 0 这两组测试数据,否则会WR
代码:
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct T{
int catfood,javabe;
double unitprice;
}a[10005];
bool cmp(T a,T b){
return a.unitprice>b.unitprice;
}
int main (){
int m,n;
while(~scanf("%d%d",&m,&n)&&!(m==-1&&n==-1)){
// if(m==-1||n==-1) break;
double sum=0;
if(n==0) printf("%.3lf
",0);
else{
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].javabe,&a[i].catfood);
a[i].unitprice= double(a[i].javabe)/a[i].catfood;
}
sort(a,a+n,cmp);
for(int i=0;m>0;i++){
if(a[i].catfood<=m)
sum+=a[i].javabe,m-=a[i].catfood;
else
sum+=(double)m*a[i].unitprice,m=0;
}
printf("%.3lf
",sum) ;
}
}
return 0;
}