蒜头君最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。
蒜头君共有 NN 头奶牛 (1 \le N \le 20,000)(1≤N≤20,000),每头奶牛有自己的高度 H_i(1 \le Hi \le 10,000)Hi(1≤Hi≤10,000),NN 头奶牛的总高度为 SS。书架高度为 B(1 \le B \le S < 2,000,000,007)B(1≤B≤S<2,000,000,007).
为了到达书架顶层,奶牛可以踩着其他奶牛的背,像叠罗汉一样,直到他们的总高度不低于书架高度。当然若奶牛越多则危险性越大。为了帮助John到达书架顶层,找出使用奶牛数目最少的解决方案吧。
输入格式
第 11 行:空格隔开的整数 NN 和 BB;
第 22 ~ N+1N+1 行:第 i+1i+1 行为整数 H_iHi。
输出格式
能达到书架高度所使用奶牛的最少数
Sample Input
6 40 6 18 11 13 19 11
Sample Output
3
思路:将奶牛的高度全部输入到数组,之后顺序排列,之后循环相加,直到奶牛高度之和大于等于总高度。
#include <stdio.h>
int main() {
int n, m, a[50], i, j, b = 0, t;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 1; i <= n - 1; i++) {//排序
for (j = 1; j <= n - i; j++) {
if (a[j] < a[j + 1]) {
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (i = 0; b < m; i++) {当达到总高度时结束并输出
b = b + a[i];
}
printf("%d", i + 1);
return 0;
}