1 条题解
-
0
【例55.2】 约翰书架
解题思路
为使奶牛数最少,优先选择最高奶牛。高度降序排序,前缀和首次达到书架高度B时的项数即答案。
正确性说明
任取k头高度之和不超过最高k头之和。若最高k头还不足则任何k头均不足;首次达到B时可实现且更少头数不可能。
易错点
题目保证全部奶牛总高足够;等于B也能到达。
复杂度
时间O(n log n),空间O(n)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; long long B; cin >> n >> B; vector<long long> a(n); for (auto &x : a) cin >> x; sort(a.begin(), a.end(), greater<long long>()); long long sum = 0; for (int i = 0; i < n; i++) { sum += a[i]; if (sum >= B) { cout << i + 1 << "\n"; break; } } return 0; }
- 1