这道题还是非常简单的,利用排序以及贪心算法就可以解决了。要注意的是,排序算法的选择,由于题目中告诉了我们数据的范围,利用桶排序是个很好的选择,因为桶排序的时间复杂度是O(n)。代码如下。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main (){
freopen ("milk.in","r",stdin);
freopen ("milk.out","w",stdout);
int N=0,M=0,P=0,A=0,PP=0;
int i=0,price=0;
cin>>N>>M;
int Pi[1005];
memset(Pi,0,sizeof(Pi));
for (i=0;i<M;i++){
cin>>P>>A;
Pi[P]+=A;
P=0;
A=0;
}
i=0;
while(N>0){
if (N>Pi[i]){
price+=i*Pi[i];
N-=Pi[i];
}
else if (N<=Pi[i]){
price+=i*N;
N=0;
}
i++;
}
cout<<price;
return 0;
}