HDU1009——FatMouse'Trade


#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个房间,每个房间有若干袋猫粮与吃的,可以等比锐换。求老鼠最多能换到多少吃的。

题目很简单,但要注意要考虑如果钱多于商品总量的情况。

思维一定要严密!


猜你喜欢

转载自blog.csdn.net/shadowfox_/article/details/79623316