题目描述:
蒜头君最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。
蒜头君共有 N 头奶牛 (1
N
20,000)(1≤N≤20,000),每头奶牛有自己的高度
(1
Hi
10,000)
(1≤
≤10,000),NN头奶牛的总高度为 S。书架高度为 B(1
B
S < 2,000,000,007)B(1≤B≤S<2,000,000,007).
为了到达书架顶层,奶牛可以踩着其他奶牛的背,像叠罗汉一样,直到他们的总高度不低于书架高度。当然若奶牛越多则危险性越大。为了帮助John到达书架顶层,找出使用奶牛数目最少的解决方案吧。
输入描述:
第 1 行:空格隔开的整数 N 和 B;
第 2~ N+1 行:第 i+1 行为整数
。
输出描述:
能达到书架高度所使用奶牛的最少数目。
输出时每行末尾的多余空格,不影响答案正确性
输入:
6 40
6
18
11
13
19
11
输出:
3
题意:
从n头奶牛中选取最少的数目的奶牛使高度≥B
题解:
从大到小排序,贪心,水题。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn = 20000 + 5;
int cow[maxn];
int cmp(int a,int b){
return a > b;
}
int main(){
int n,b;
while(scanf("%d%d",&n,&b)!=EOF){
for(int i = 0; i < n; i ++){
scanf("%d",&cow[i]);
}
sort(cow,cow + n,cmp);
int ans = 0,sum = 0;
for(int i = 0; i < n; i ++){
if(sum >= b) break;
else{
sum += cow[i];
ans ++;
}
}
cout<<ans<<endl;
}
return 0;
}