1 //于其说是一道贪心题,不如说是一道考察结构体运用的题目。对于重载运算符一定要熟练运用。 我们优先购买便宜的牛奶即可,注意使用min函数节约代码量。 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 int n,m,ans; 7 struct node 8 { 9 int a,b;//牛奶单价和产量 10 friend bool operator < (node x,node y) 11 { 12 return x.a < y.a; 13 } 14 }a[5005]; 15 16 int main() 17 { 18 scanf("%d%d",&n,&m); 19 for(int i = 1;i <= m;i++) 20 scanf("%d%d",&a[i].a,&a[i].b); 21 sort(a + 1,a + 1 + m); 22 int i = 1; 23 while(n)//从n开始减起,直达n为零停止 24 if(a[i].b != 0)//当这头牛还没购买完 25 { 26 int t = min(a[i].b,n);//提前存起来,避免后面干扰 27 ans += a[i].a * t; 28 n -= t; 29 a[i].b -= t; 30 } 31 else 32 i++;//购买完了换头牛 33 printf("%d ",ans); 34 return 0; 35 }