本文最后更新于191 天前,其中的信息可能已经过时,如有错误请发送邮件到1729915388@qq.com
【问题描述】
小明想摘树上的苹果,但他不够高,够不到高处的果子,只能搬来木桩垫在脚下。小明共找来N个木桩(1 ≤ N ≤ 2000),每个木桩的高度为Hi(1 ≤ Hi ≤ 10000),N个木桩的总高度为S。最高处的果子的高度为B(1 ≤ B ≤ S < 2000000007)。为了能摘到最高处的苹果,可以将木桩像叠罗汉一样垒起来,直到他们的总高度不低于最高处苹果的高度。当然若木桩垒的越多则危险性越大。为了帮助小明到摘到最高苹果处,找出使用木桩数目最少的解决方案吧。
【输入说明】
第1行:空格隔开的整数N和B
第2~N+1行:第i+1行为整数Hi
【输出说明】
到达最高苹果处使用木桩数目最少数目
【输入样例】
6 40
6
18
11
13
19
11
【输出样例】
3
#include<stdio.h>
#define N 100
void Insertion_Sort(int *a,int n){
int i = 0;
for(i = 0; i < n-1; i++)
{
int M = i;
int num = a[i + 1];
while(M >= 0)
{
if(num > a[M])
{
a[M + 1] = a[M];
M--;
}
else
{
break;
}
}
a[M + 1] = num;
}
}
int main()
{
int Hi[N];
int n,B;//n:木桩数目,B高度
int sum = B;
int tmp = 0;
scanf("%d %d",&n,&B);
for(int i=0; i < n; i++)
scanf("%d",&Hi[i]);
Insertion_Sort(Hi,n);
for(int i = 0; i < n; ++i)
{
tmp += Hi[i];
if(tmp >= B)
{
sum=i+1;
break;
}
}
printf("%d",sum);
return 0;
}