码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1009

时间:2015-03-16 19:02:08      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

这道题使用贪心法,为了得到最多的javabean,需要从价格最便宜的开始买,直到所有的food都用完。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct sg{
    double javabean;
    double foodcat;
    double price;
};


struct sg input[1005];

int cmp(const void *a, const void *b)
{
   
    return (*(struct sg *)a).price >  (*(struct sg *)b).price ? 1 : -1;
}

int main(void)
{
    int i;
    int M, N;
    double sum;
    double sur;
    while(scanf("%d%d", &M, &N) && (M != -1 && N != -1)) {
        for(i = 0; i < N; i++)    {
            scanf("%lf%lf", &input[i].javabean, &input[i].foodcat);    
            input[i].price = (input[i].foodcat) / input[i].javabean;
        }
            
        sum = 0;
        sur = M;

        qsort(input, N, sizeof(struct sg), cmp); 

        for(i = 0; i < N; i++) {
            double tmp = input[i].foodcat;
            if(tmp < sur && sur > 0)  {
                sum += input[i].javabean;
                sur -= input[i].foodcat;
            } else if(sur > 0) {
                sum += (sur / input[i].foodcat * input[i].javabean);
                sur = 0.0;
                break;
            }    
        
        }
        printf("%0.3lf\n", sum);    
    
    }
    
    return 0;
}

 

HDU 1009

标签:

原文地址:http://www.cnblogs.com/mylinuxer/p/4342466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!