题目来源: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\n",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\n",sum) ; } } return 0; }