刚开始看描述还以为是背包,看到后面可分割才明白是最简单的排序···
代码如下:
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
struct thing{
int p;
int volume;
}t[110];
bool com(thing a,thing b)
{
return a.p>b.p;
}
int main()
{
int v,n;
scanf("%d",&v);
while(v!=0){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&t[i].p,&t[i].volume);
sort(t+1,t+n+1,com);
int sum=0;
for(int i=1;i<=n;i++){
if(v>t[i].volume){
sum+=t[i].p*t[i].volume;
v-=t[i].volume;
}
else{
sum+=t[i].p*v;
break;
}
}
printf("%d\n",sum);
scanf("%d",&v);
}
return 0;
}