-
描述
-
John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。
John共有N头奶牛(1 ≤ N ≤ 20,000),每头奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000),N头奶牛的总高度为S。书架高度为B(1 ≤ B ≤ S < 2,000,000,007).
为了到达书架顶层,奶牛可以踩着其他奶牛的背,像叠罗汉一样,直到他们的总高度不低于书架高度。当然若奶牛越多则危险性越大。为了帮助John到达书架顶层,找出使用奶牛数目最少的解决方案吧。
输入
-
第1行:空格隔开的整数N和B
第2~N+1行:第i+1行为整数Hi
输出
- 能达到书架高度所使用奶牛的最少数目 样例输入
-
6 40 6 18 11 13 19 11
样例输出
-
3
- 降序快排后贪心即可
- 参考代码:
#include<cstdio> #include<cstring> int a[201000]; int n,b; void qs(int l, int r) { int i=l, j=r, x=a[(l+r)/2], y; do { while (a[i]>x) i++; while (a[j]<x) j--; if (i<=j) { y = a[i]; a[i] = a[j]; a[j] = y; i++, j--; } }while (i<=j); if (i<r) qs(i,r); if (l<j) qs(l,j); } void init() { scanf("%d%d", &n,&b); for (int i=1;i<=n;i++) { scanf("%d", &a[i]); } qs(1,n); int i=1; int tot=0; while (1) { tot+=a[i]; if (tot>=b) {printf("%d", i); return;} i++; } } int main() { init(); return 0; }