2.题解分析:
根据题意,很容易想到借用结构体数组来存储数据,然后进行排序,需要注意的是本题重点在排序之后的数据处理上:
首先将n作为一个标志变量,初始值为需要的牛奶总数:
1.如果n<=0跳出循环;
2.当n大于等于遍历后的那个奶农所能提供的最大奶量时,将这个奶农的价钱加上,并减少已近采购的数量更新n的值;
3.特例:如果n小于遍历后的那个奶农所能提供的最大奶量,直接算出价钱,并将n更新为0,结束程序
#include <bits/stdc++.h>
using namespace std;
#include <cstring>
struct key{
int a;
int b;
}x[5000];//定义结构体
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d %d",&x[i].a,&x[i].b);
} //输入数据
for(int i=0;i<m;i++){
for(int j=i+1;j<m;j++){
if(x[i].a>x[j].a){
swap(x[i],x[j]);
} //冒泡排序,可以用快排或sort函数提高速度
}
}
int sum=0;
for(int i=0;i<m;i++){
if(n<=0) break;
if(n>=x[i].b){
sum+=x[i].a*x[i].b;
n=n-x[i].b;
}
else{
sum+=n*x[i].a;
n=0; //数据处理
}
}
printf("%d\n",sum);//输出结果
}