题解
2026-08-26 23:09:43
发布于:广东
2阅读
0回复
0点赞
注释写得很详细,看注释。
嘻嘻又发布了一篇题解
俺啥都没说。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m; // n: 物品的数量, m: 剩余的预算(或容量)
// 定义结构体存储物品的信息
struct st {
ll j; // 物品的单价
ll l; // 物品的数量(或可用量)
} a[2000010]; // 存储所有物品的数组
// 自定义排序规则:按物品的单价从小到大排序(贪心策略:优先买便宜的)
bool cmp(st a, st b) {
return a.j < b.j;
}
int main() {
// 读入预算 m 和物品数量 n
cin >> m >> n;
// 读入每个物品的单价和数量
for(ll i = 1; i <= n; i++) { // 注意:原代码缺少了变量类型 ll,此处已补上
cin >> a[i].j >> a[i].l;
}
// 将物品按单价升序排列
sort(a + 1, a + n + 1, cmp);
ll ans = 0; // 记录总花费(或总价值)
// 遍历排好序的物品,优先购买单价低的
for(ll i = 1; i <= n; i++) {
// 如果当前预算足以买下该物品的全部数量
if(m > a[i].l) {
ans += a[i].l * a[i].j; // 累加全部数量的花费
m -= a[i].l; // 扣除相应的预算
}
// 如果预算不足以买下该物品的全部数量,则只买当前预算能买到的部分
else {
ans += m * a[i].j; // 累加剩余预算能买的花费
break; // 预算耗尽,退出循环
}
}
// 输出最大总花费
cout << ans;
return 0;
}
这里空空如也







有帮助,赞一个