计蒜客--T1233--书架

题目描述:
蒜头君最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。
蒜头君共有 N 头奶牛 (1 \leq N \leq 20,000)(1≤N≤20,000),每头奶牛有自己的高度 H i H_i (1 \leq Hi \leq 10,000) H i H_i (1≤ H i H_i ≤10,000),NN头奶牛的总高度为 S。书架高度为 B(1 \leq B \leq S < 2,000,000,007)B(1≤B≤S<2,000,000,007).
为了到达书架顶层,奶牛可以踩着其他奶牛的背,像叠罗汉一样,直到他们的总高度不低于书架高度。当然若奶牛越多则危险性越大。为了帮助John到达书架顶层,找出使用奶牛数目最少的解决方案吧。
输入描述:
第 1 行:空格隔开的整数 N 和 B;
第 2~ N+1 行:第 i+1 行为整数 H i H_i

输出描述:
能达到书架高度所使用奶牛的最少数目。
输出时每行末尾的多余空格,不影响答案正确性
输入:
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;
}

发布了15 篇原创文章 · 获赞 1 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Ypopstar/article/details/104617793