贪心算法

一、FatMouse' Trades
题目描述 : 一共 M 元钱,N 种物品:每种物品共 J 磅,价值 F 元,可以使用 0 到 F 元的任意价格购买相应数量的物品,求可以购买的最多物品数量。

解答 :可以根据物品的性价比进行一一选择。
注意点 :小数格式输出、特殊情况的考虑

// 自己写的答案,代码逻辑不是特别清晰,可以修改
#include
#include
using namespace std;
int j[2000], f[2000];
double choice[2000];
int choose(int n){
    if (n <= 0){
        return -1;
    }
    int purc = 0;
    for (int i = 0; i < n; i++) {
        if (choice[i]>=choice[purc]) {
            purc = i;
        }
    }
    if (choice[purc] == -1){
        return -1;
    }
    return purc;
}
int main(){
    int m, n;
    cin >> m >> n;
    while (m != -1 && n != -1) {
        double sum = 0;
        for (int i = 0; i < n; i++){
            cin >> j[i] >> f[i];
            choice[i] = double( j[i]) / double(f[i]);
        }
        int purc = choose(n);
        while (purc != -1 && m >= f[purc]) {
            sum += j[purc];
            choice[purc] = -1;
            m -= f[purc];
            purc = choose(n);
        }
        if (choice[purc] != -1) {
            if (m < f[purc]){
                sum += double(m)*double(j[purc]) / double(f[purc]);
            }
        }
        cout.precision(3);
        cout << setiosflags(ios::fixed) << setprecision(3) << sum << endl;
        cin >> m >> n;
    }
}

你可能感兴趣的:(贪心算法)