#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
struct goods{
int sum;
int sum2;
double piece;
}p[MAX];
int cmp(const void *a,const void *b){
struct goods *aa=(struct goods *)a;
struct goods *bb=(struct goods *)b;
if(aa->piece>bb->piece){
return -1;
}else{
return 1;
}
}
int main(int argc, const char * argv[]) {
int m,n;
while(scanf("%d %d",&m,&n)&&m>=0&&n>=0){
int i=0;
double maxsum=0;
int sum,sum2;
for(i=0;i<n;i++){
scanf("%d %d",&sum,&sum2);
p[i].sum=sum;
p[i].sum2=sum2;
p[i].piece=sum*1.0/sum2;
}
qsort(p,n,sizeof(p[0]),cmp);//价格降序排列;
/*for(i=0;i<n;i++){
printf("%d %d\n",p[i].sum,p[i].piece);
}*/
for(i=0;i<n;i++){
if((m-p[i].sum2)>0){
m-=p[i].sum2;
maxsum+=p[i].sum;
}else{
maxsum+=(m*p[i].piece);
m=0;
}
if(m<=0){
break;
}
}
printf("%.3lf\n",maxsum);
}
return 0;
}
现在acm流行考英语么?让我读题读了半天。
总的来说,老鼠总共有n袋猫粮,可以换吃的。总共有n个房间,每个房间有若干袋猫粮与吃的,可以等比锐换。求老鼠最多能换到多少吃的。
题目很简单,但要注意要考虑如果钱多于商品总量的情况。
思维一定要严密!