贪心,按价值从大到小排序
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=110;
struct stuff
{
int v,w;
bool operator<(const stuff &rhs)const{
return v>rhs.v;
}
}stuf[maxn];
int v,n;
int main(){
while (scanf("%d",&v)&&v)
{
scanf("%d",&n);
for (int i=0;i<n;++i)scanf("%d%d",&stuf[i].v,&stuf[i].w);
sort(stuf,stuf+n);
int ans=0;
for (int i=0;i<n&&v;++i)
{
int cnt=0;
if(stuf[i].w>v){
cnt=v,v=0;
}else{
cnt=stuf[i].w,v-=stuf[i].w;
}
ans+=cnt*stuf[i].v;
}
printf("%d\n",ans);
}
return 0;
}