链接:https://ac.nowcoder.com/acm/contest/12949/A
来源:牛客网
第一题:A - 跳高
题目描述:
在新的一年,牛牛想跳得更高。牛牛本身可以跳高 h 米。同时牛牛有 n 颗跳高弹,使用第 i 颗跳高弹可以使牛牛跳高高度增加 a(i) 米,且跳高弹的效果是可以叠加的,也就是说如果牛牛使用多颗跳高弹,那么他的跳高高度将会增加这些跳高弹单个效果的和。
每颗跳高弹只能使用一次。
请问牛牛最少需要使用多少个跳高弹,才能让牛牛的高度至少是 u 米高呢?
数据保证答案存在。
分析:
1.最少使用跳高弹个数,那么优先选择ai值大的跳高弹进行使用,则个数最少。
2.边界问题,自身能跳h米高,若已经达到要求,就不需要使用跳高弹。
3.结果输出的是使用了几颗,不需要给出跳高弹索引,这使问题简单化了。
总结:
本道题主要思路就是将跳高弹效果进行从大到小排序,进行累计求和,并计数,达到要求高度后就输出计数。难度不大。
求解代码如下:
//第一题:A - 跳高
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int a,int b)
{return a>b;}
int main()
{
int i;
int n;
int h;
int u;
int count=0;
cin>>n>>h>>u;
vector<int> arr(n,0);
int tmp=h;
for(i=0;i<n;i++)
{cin>>arr[i];
}
sort(arr.begin(),arr.end(),cmp); //排序,自定义cmp函数,从大到小排序
for(i=0;i<n;i++)
{
if(tmp>=u)
{ break; }
tmp=tmp+arr[i];
count++;
}
cout<<count;
return 0;
}