一、FatMouse' Trades
题目描述 : 一共 M 元钱,N 种物品:每种物品共 J 磅,价值 F 元,可以使用 0 到 F 元的任意价格购买相应数量的物品,求可以购买的最多物品数量。
解答 :可以根据物品的性价比进行一一选择。
注意点 :小数格式输出、特殊情况的考虑
// 自己写的答案,代码逻辑不是特别清晰,可以修改
#include<iostream>
#include<iomanip>
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;
}
}