分析:题不难,直接贴代码吧!

#include <iostream>
#include <algorithm>
#include <map>
#include <string> #没有这行会报错
using namespace std;

struct treasure {
int pi; //单价
int pm; //体积
};

int cmp(struct treasure a, struct treasure b){
return a.pi > b.pi; //从大到小排序
}

int main() {
int v,n;
int count;
int weight;
struct treasure jiegou[100];

while (cin >> v &&v){
weight=v;
count=0;
cin >> n;

for(int i=0;i<n;i++){
cin >> jiegou[i].pi;
cin >> jiegou[i].pm;
}
sort(jiegou,jiegou+n,cmp); //结构题排序

for(int i=0;i<n;i++){
if(weight >=jiegou[i].pm){
count+=jiegou[i].pm*jiegou[i].pi;
weight=weight-jiegou[i].pm;
continue;
} else{
count+= (weight)*jiegou[i].pi;
break;
}
}
cout << count << endl;
}

return 0;
}