每周一题

【每周一题】2017.3.6 HDU1009 解题报告

2017-03-06  本文已影响0人  whucat

题目描述

解题分析

思考题

1. 这道题的时间复杂度和空间复杂度是多少?

2. 如果把题意改成“杰瑞必须换取房间中的所有奶酪,不能换取一部分”,那么这是一道什么算法题?

例程(C++)

(注:例程只是给出一种解题方法,不是标准程序,也不一定是最完美的解法)

//HDU 1009 by Xinjie Wang

#include <iostream>
#include <algorithm>
using namespace std;

typedef struct DATASET
{
    int JavaBeans;
    int CatFood;
    double JavaBeansPerCatFood;
}DataSet;

bool compareFunc(DataSet _a, DataSet _b)
{
    return _a.JavaBeansPerCatFood > _b.JavaBeansPerCatFood;
}

int main()
{
    int m, n;
    while (scanf("%d %d", &m, &n), (m!= -1) && (n != -1))
    {
        DataSet dataset[1024];
        int J, F;
        for (int i = 0; i < n; i++)
        {
            cin >> J >> F;
            dataset[i].JavaBeans = J;
            dataset[i].CatFood = F;
            dataset[i].JavaBeansPerCatFood = J / (double)F;
        }
        
        sort(dataset, dataset + n, compareFunc);

        double finalAmount = 0;
        for (int i = 0; i < n; i++)
        {
            if (m >= dataset[i].CatFood)
            { 
                m -= dataset[i].CatFood;
                finalAmount += dataset[i].JavaBeans;
            }
            else
            {
                finalAmount += m * dataset[i].JavaBeansPerCatFood;
                break;
            }
        }

        printf("%.3f\n", finalAmount);
    }
    return 0;

}
上一篇下一篇

猜你喜欢

热点阅读