13.计蒜客ACM题库.A1147 结果填空:礼物盒

10 篇文章 0 订阅
10 篇文章 0 订阅

13.计蒜客ACM题库.A1147 结果填空:礼物盒

小y 有一个宽度为 100cm,高度为 20cm,深度为 1cm 的柜子,如下图。
在这里插入图片描述

小y 还有 36 个礼物盒,他们的深度都为 1cm。
他们对应的宽度和高度如下,单位(cm)。

11 3
8 12
11 17
16 13
1 14
2 8
6 10
10 18
17 11
10 15
6 14
5 6
2 19
19 10
4 9
7 9
5 14
5 20
15 19
3 17
15 11
7 25
11 20
9 12
17 4
9 19
4 18
10 10
12 19
17 3
19 9
20 16
11 16
10 2
20 15
3 14

现在小y 想把这些盒子放到柜子上,由于礼物盒里面都装有礼物,礼物盒必须向上放置,并且不能堆放。由于礼物盒深度和柜子深度一样,所以礼物盒和柜子深度方向也必须一致。并且礼物盒的高度还不能大于柜子的高度,否者放不进去。小y 希望放到柜子上礼物盒的宽度和正好等于柜子的宽度,也就是希望柜子两边都不存在间隙。如下图符合条件的放置。
在这里插入图片描述

满足条件的情况下,小y 希望能尽可能多的放置礼物盒,算出最多能放多少个礼物盒。
解:

#include <stdio.h>
int main() {
    printf("%d\n",
    // 在下方填入答案
    18
    );
    return 0;
}

解决方法:

#include<iostream>
#include <algorithm>
using namespace std;
int main(){
	int w[36] = {0,11,8,11,16,1,2,6,10,17,10,6,5,2,19,4,7,5,5,15,3,15,11,9,17,9,4,10,12,17,19,20,11,10,20,3};
	//只需要物品宽的数组,且数组中物品对应高超过20的删去
	int i=1,sum=100,count=0;
	sort(w,w+36);//排序
	while(1){
		if(w[i]<sum){
			sum=sum-w[i];//借助贪心算法按宽从小到大往里放,直到放不进去为止
			i++;
			count++;
		}
		if(w[i]>sum)//放不进去,跳出循环,停止
		break; 
	}
	cout<<count;

}

本题借鉴了深度优先算法 DFS 全排列 例题笔记这篇文章的思路,感谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值