- 建议
真“已修复”
- 2023-12-14 12:48:35 @
方老师快点修复啊啊啊啊啊啊啊`(>﹏<)′
ヽ(≧□≦)ノ我要做题!!!
3 条评论
-
wangziyin 梓印大大帅 LV 9 @ 2023-12-14 19:03:00
-
2023-12-14 18:59:02@
你怎么也又卡海外了
-
2023-12-14 18:55:15@
- 1
你这代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[10001],b[10001],som=0,m,n,i,j,q=0;
cin>>m>>n;
for(i=1;i<=n;i++){
cin>>a[i]>>b[i];}
for(i=1;i<n;i++){
for(j=i+1;j<=n;j++){
if(a[i]>a[j]){
swap(a[i],a[j]);
swap(b[i],b[j]);
}
}}
for(i=1;i<=n;i++){
for(j=1;j<=b[i];j++){
som+=a[i];
if(som>=m)
break;
q++;}
if(som>m)
break;
}
cout<<q;
return 0;
}
这段代码的目的是在给定的预算 m
下,购买尽可能多的物品。物品有单价和库存数量,代码通过贪心算法来实现这一目标。具体来说,它首先将物品按单价从小到大排序,然后依次购买单价最低的物品,直到预算用完。
m
和物品数量 n
。a[i]
和库存数量 b[i]
。som
和已购买物品数量 q
。som
超过预算 m
,则停止购买。q
。虽然这段代码能够正确解决问题,但有一些可以优化的地方:
std::sort
。#include <bits/stdc++.h>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
vector<pair<int, int>> items(n); // 存储物品的单价和库存
for (int i = 0; i < n; ++i) {
cin >> items[i].first >> items[i].second;
}
// 按单价从小到大排序
sort(items.begin(), items.end());
int totalCost = 0; // 总花费
int totalItems = 0; // 总物品数量
for (const auto& item : items) {
int price = item.first;
int stock = item.second;
// 计算可以购买的最大数量
int buy = min(stock, (m - totalCost) / price);
if (buy <= 0) break; // 如果买不起,提前终止
totalCost += buy * price;
totalItems += buy;
if (totalCost >= m) break; // 如果预算用完,提前终止
}
cout << totalItems << endl;
return 0;
}
vector
和 pair
**:
vector<pair<int, int>>
来存储物品的单价和库存,代码更简洁。std::sort
**:
std::sort
进行排序,时间复杂度为 O(n log n),比冒泡排序更高效。totalCost
和 totalItems
,使代码更易读。这段代码通过贪心算法解决了在预算有限的情况下购买最多物品的问题。优化后的代码在性能和可读性上都有所提升,适用于更大的数据集。
注册一个 HuituOJ 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。