sa贪心算法

该博客介绍了一道编程题目,内容涉及通过排序算法解决如何用最少数量的奶牛叠起来达到书架高度的问题。蒜头君有20,000头奶牛,每头奶牛有不同的高度,目标是找出最小数量的奶牛,让它们的高度之和能堆叠到书架的高度。博主提供了一个C语言的解决方案,通过排序奶牛的高度并累加,找到达到书架高度所需的最少奶牛数量。
摘要由CSDN通过智能技术生成

蒜头君最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。

蒜头君共有 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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值