有N栋房屋待售。第i座房子要花艾美金购买。您的预算为B美元。您最多可以购买多少间房屋?
我的算法非常简单。通过将所有房屋价格添加到由优先队列表示的最小堆中,对所有房屋价格进行排序,然后从队列中弹出价格(按此计数),直到达到预算为止。
所以我真的不知道为什么我的代码甚至不能通过第一个测试用例。任何建议将不胜感激!
这是我的代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t; // read t. cin knows that t is an int, so it reads it as such.
for (int i = 1; i <= t; ++i) {
int N, B;
cin >> N >> B;
priority_queue <int, vector<int>, greater<int> > pq;
for(int i=0; i<N; i++){
int a;
cin >> a;
pq.push(a);
}
long sum = 0;
long count =0;
while(sum < B){
sum += pq.top();
pq.pop();
++count;
}
if(sum > B){
--count;
}
cout << "Case #" << i << ": " << count << endl;
}
return 0;
}
(我也将问题提示附加为图片,因为过去我曾因问题提示使我的问题混乱而受到批评,但请让我知道我选择的这种格式是否不好)
答案 0 :(得分:1)
有些事情可能会让您失望:
vivek_23 提到了while(sum < B)
,如果我们可以用预算购买所有房屋,而将其更改为while(sum < B && !pq.empty())
,则此循环将出现运行时错误。
另外,您在两个嵌套循环中都使用了相同的变量i
,将其更改为其他变量