小y 有一个宽度为 100cm,高度为 20cm,深度为 1cm 的柜子,如下图。

小y 还有 363636 个礼物盒,他们的深度都为 1cm。

他们对应的宽度和高度如下,单位(cm)。

 
1
11 3

2
8 12

3
11 17

4
16 13

5
1 14

6
2 8

7
6 10

8
10 18

9
17 11

10
10 15

11
6 14

12
5 6

13
2 19

14
19 10

15
4 9

16
7 9

17
5 14

18
5 20

19
15 19

20
3 17

21
15 11

22
7 25

23
11 20

24
9 12

25
17 4

26
9 19

27
4 18

28
10 10

29
12 19

30
17 3

31
19 9

32
20 16

33
11 16

34
10 2

35
20 15

36
3 14

数据可以参考 礼物盒的数据。

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

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

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

使用DFS深度遍历搜索:

#include <iostream>using namespace std;int box[36][2]={
{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}};int sum=0;//盒子的总数//count:盒子的数量,width:现在的宽度,i:数组的行数(数据的个数)
void dfs(int count,int width,int i)
{if(width==100)//先判断是否满足目标状态(width==100),如果是的话,do something{if(count>sum){sum=count;}return;//如果是目标状态,就return吧}if(width>100||i>35)//判断该状态是否合法,不合法return掉{return;}if(box[i][1]<=20)//判断是否高度小于20{dfs(count+1,width+box[i][0],i+1);//进入新状态}dfs(count,width,i+1);//进入新状态}int main()
{dfs(0,0,0);//DFS的初始状态cout<<sum;return 0;
}
#include <iostream>using namespace std;int box[36][2]=
{{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}
};int sum=0;//盒子的总数//count:盒子的数量,width:现在的宽度,i:数组的行数(数据的个数)
void dfs(int count,int width,int i)
{if(width==100)//先判断是否满足目标状态(width==100),如果是的话,do something{if(count>sum){sum=count;}return;//如果是目标状态,就return吧}if(width>100||i>35)//判断该状态是否合法,不合法return掉{return;}if(box[i][1]<=20)//判断是否高度小于20{dfs(count+1,width+box[i][0],i+1);//进入新状态//如果width+box[35][0]刚好==100,i+1==36,这个状态也是合法的}dfs(count,width,i+1);//进入新状态}int main()
{dfs(0,0,0);//DFS的初始状态cout<<sum;return 0;
}/*************************************************************************************************************/
/*
#include <iostream>using namespace std;int box[36][2]=
{{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}
};int sum=0;//盒子的总数//count:盒子的数量,width:现在的宽度,i:数组的行数(数据的个数)
void dfs(int count,int width,int i)
{if(width>100||i>35+1)//判断该状态是否合法,不合法return掉  //如果width+box[35][0]刚好==100,i+1==36,这个状态也是合法的{return;}if(width==100)//先判断是否满足目标状态(width==100),如果是的话,do something{if(count>sum){sum=count;}return;//如果是目标状态,就return吧}if(box[i][1]<=20)//判断是否高度小于20{dfs(count+1,width+box[i][0],i+1);//进入新状态//如果width+box[35][0]刚好==100,i+1==36,这个状态也是合法的
}
dfs(count,width,i+1);//进入新状态}int main()
{dfs(0,0,0);//DFS的初始状态cout<<sum;return 0;
}
*/

2017年蓝桥杯模拟赛-7礼物盒相关推荐

  1. 计蒜客蓝桥杯模拟赛5 礼物盒

    题目描述: 第七题 小y 有一个宽度为 100cm,高度为 20cm,深度为 1cm 的柜子,如下图. 小y 还有 3636 个礼物盒,他们的深度都为 1cm. 他们对应的宽度和高度如下,单位(cm) ...

  2. 2017年蓝桥杯模拟赛

    1.标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年). 他年少时便很有才华.一次有人问他的年龄,他回答说: "到了x的平方那年,我刚好是x岁". 请你计算一下,德摩 ...

  3. 【蓝桥杯Web】大一小白参与蓝桥杯模拟赛二期web组体会

    目录 前言 一.相关比赛介绍 1.ACM国际大学生程序设计竞赛 2.蓝桥杯 3.GPLT团队程序设计天梯赛 4.leetcode周赛和双周赛 5.PAT 二.蓝桥杯 1.应该参加蓝桥杯吗? 2.如何进 ...

  4. 2020年蓝桥杯模拟赛2020.3.25直播笔记

    2020年蓝桥杯模拟赛解题报告(CPP版本) 第八题 长草的bfs写法[我想暴力模拟O kmn] 深搜会爆 bfs像投到水里的涟漪 问题: const int dx[] = {1, 0, -1, 0} ...

  5. 第十三届蓝桥杯模拟赛第二期JAVA组个人题解

    第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...

  6. 蓝桥杯模拟赛第二场(web)

    文章目录 蓝桥杯模拟赛第二场(web) 1 卡片化标签页 2 随机数生成器 3 个人博客 4 学生成绩统计 5 水果摆盘 6 给页面化个妆 7 小兔子爬楼梯 8 时间管理大师 9 购物车 10 菜单树 ...

  7. 第十三届蓝桥杯模拟赛(第三期)试题与题解 C++

    文章目录 第十三届蓝桥杯模拟赛(第三期)试题与题解 1.试题A 题解:数制转换 2.试题B 题解:枚举 3.试题C 题解:枚举 4.试题D 题解:最小生成树 5.试题E 方法一:暴力求和 方法二:一维 ...

  8. 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)

    第十四届蓝桥杯模拟赛第一期 1. 二进制位数 问题描述 答案提交 参考答案 2. 晨跑 问题描述 答案提交 参考答案 3. 调和级数 问题描述 答案提交 参考答案 程序验证 4. 山谷 问题描述 答案 ...

  9. # 2017年蓝桥杯省赛cc++本科B组试题

    2017年蓝桥杯省赛c/c++本科B组试题 第一题:购物单 问题 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大 ...

最新文章

  1. [转载] 民兵葛二蛋——第2集
  2. R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position)
  3. 【Mysql】Mysql root 权限下无法创建数据库
  4. guava之preconditions
  5. Maven-学习笔记04【基础-Maven生命周期和概念模型图】
  6. 如何向微软 Docs 和本地化社区提交翻译贡献
  7. windows版本的clion软件除了使用wsl配置Ubuntu子系统外,还可以使用MinGW-w64来配置gcc和g++
  8. 什么是掼蛋游戏呼叫中心
  9. Python 3 的新特性zz
  10. 微信小程序和传统网页开发的区别
  11. vivo X30 5G版现身Geekbench:搭载三星Exynos 980
  12. 纯CSS打造圆角Table效果
  13. CDH中配置hive支持update delete
  14. opencv调用摄像头
  15. mysql语句解析_MYSQL中SQL执行分析
  16. Linux - 搭建LDAP统一认证服务
  17. m3u8解析php,PHP解码转发M3U8 PHP读取转发M3U8的方法
  18. Python 网络编程入门——用 Socket 做一个风花雪月服务器
  19. Java实现生成并下载Excel文件
  20. python大数据工程师薪资待遇_2019年就业薪资,凭什么大数据工程师遥遥领先?...

热门文章

  1. svg 实现圆环倒计时效果
  2. 模拟调制系统 思考题
  3. Git超详细学习笔记 手把手带你一步一步操作 -- 详细分析git 对象-域-分支以及github使用
  4. Java设计模式学习1:创建型与结构型
  5. Markdown Rreview Enhanced
  6. ostringstream的用法
  7. 基于Matlab的控制系统计算机仿真设计(一)
  8. 浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】
  9. Adobe Lightroom Classic 入门教程(九)本地局部调整 --- 画笔工具自定义区域
  10. Android中LayoutParams类精炼详解