题目描述】 马上又到了一年一度的新年联欢,小明作为班里的班长,负责组织策划新年联欢活动,他决定采购一些奖品奖励积极参与每个项目活动的同学。为了激励更多的人参与活动,需要采购的奖品数目越多越好。班费中可支出的钱数为m 元,现给定商店中n 种可作为奖品的物品的价格和库存数量,怎样才能购得最多的物品数? 【输入】 输入一共n+1 行: 第一行包含两个正整数m (1<m≤10000 )和n (1<n≤100 ),表示可支出的费用为m元和可供购买的物品有n 种。 接下来的n 行,每行包含两个数(有一个空格分隔),分别表示一种物品的单价a 和库存数量b 。a 和b 均不会超过1000 。 【输出】 一个整数,表示最多可以购买的物品数量。 【输入样例】 500 6 100 3 20 15 50 10 35 5 5 6 60 2 【输出样例】 25C++
时间: 2024-04-19 16:27:36 浏览: 346
这道题可以使用贪心算法来解决。首先将物品按照单价从小到大排序,然后从单价最低的物品开始购买,直到花费超过可支出的费用m或者某一种物品的库存为零为止。这样就可以购买到最多的物品数量。
以下是C++的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Item {
int price;
int quantity;
};
bool compare(Item a, Item b) {
return a.price < b.price;
}
int maxItems(int m, vector<Item>& items) {
sort(items.begin(), items.end(), compare);
int maxCount = 0;
int spent = 0;
for (int i = 0; i < items.size(); i++) {
if (spent + items[i].price > m || items[i].quantity == 0) {
break;
}
maxCount++;
spent += items[i].price;
items[i].quantity--;
}
return maxCount;
}
int main() {
int m, n;
cin >> m >> n;
vector<Item> items(n);
for (int i = 0; i < n; i++) {
cin >> items[i].price >> items[i].quantity;
}
cout << maxItems(m, items) << endl;
return 0;
}
```
输入示例:
```
500 6
100 3
20 15
50 10
35 5
5 6
60 2
```
输出示例:
```
25
```
希望能帮到你!如有任何疑问,请随时问我。
阅读全文