9.10 给你一堆n个箱子,箱子宽w,高h,深d。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一个方法,搭出最高的一堆箱子,箱堆的高度为每个箱子高度的总和。

解法:

要解决此题,我们需要找到不同子问题之间的关系。

假设我们又以下这些箱子:b1、b2,...,bn。能够堆出的最高箱堆的高度等于max(底部为b1的最高箱堆,底部为b2的最高箱堆,...,底部为bn的最高箱堆)。也就是说,只要试着用每个箱子作为箱堆底部并搭出可能的最高高度,就能找出箱对的最高高度。

回溯的实现方法:

#include<iostream>
#include<vector>
using namespace std;struct box
{int height;int wide;int depth;box(int h,int w,int d):height(h),wide(w),depth(d) {}
};bool isValid(vector<box> &path,box b)
{if(path.empty())return true;box top=path[path.size()-1];return b.depth<top.depth&&b.height<top.height&&b.wide<top.wide;
}void helper(vector<box> &boxes,vector<box> &path,int &maxHeight)
{int i;for(i=0;i<boxes.size(); i++){if(isValid(path,boxes[i])){path.push_back(boxes[i]);helper(boxes,path,maxHeight);path.pop_back();}}if(i==boxes.size()){int j,sum=0;for(j=0; j<path.size(); j++){sum+=path[j].height;}if(sum>maxHeight)maxHeight=sum;return;}
}
int maxBoxTower(vector<box> &boxes)
{vector<box> path;int maxHeight=0;helper(boxes,path,maxHeight);return maxHeight;
}int main()
{vector<box> b= {box(2,2,2),box(1,2,1),box(3,2,1),box(3,3,3)};cout<<maxBoxTower(b)<<endl;
}

careercup-递归和动态规划 9.10相关推荐

  1. 看动画轻松理解“递归”与“动态规划”

    作者 | 程序员小吴 来源 | 五分钟学算法 在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知 ...

  2. 斐波那契数列的实现(简单递归和动态规划)

    斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 1 #include "stdafx.h" 2 #include <string> 3 using nam ...

  3. c 递归下降识别程序_看动画轻松理解递归与动态规划

    在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点. 程序员小吴打算使用动画的形式来帮助理解 ...

  4. sql表中只有子节点的递归_动态规划与静态规划、递归、分治、回溯

    动态规划算是运筹学或者算法中的硬骨头了.不是说算法本身有多难,而是学完用完之后还是感觉到对其领会的不够深入,一种能用其术,不知其道的感觉.在很多教材或者回答中,经常看多将动态规划放在递归这一部分中.当 ...

  5. 史上最容易理解的暴力递归和动态规划~~

    史上最容易理解的暴力递归和动态规划~~ 介绍递归和动态规划 暴力递归: 1, 把问题转化为规模缩小了的同类问题的子问题 2, 有明确的不需要继续进行递归的条件(base case) 3, 有当得到了子 ...

  6. 暴力递归转动态规划----以货币数问题展开

    接着上道题,这道题也是用来感受暴力递归优化成动态规划的套路.先想暴力尝试的方法,然后优化成动态规划.首先是原问题的暴力尝试方法.只有想出尝试方法是最难.最重要的. 我们首先来看一下题目: 给你一个数组 ...

  7. 【算法】【递归与动态规划模块】斐波那契数列的系列问题解法及递推类型问题的最优解

    目录 前言 问题介绍 解决方案 代码编写 java语言版本 c语言版本 c++语言版本 思考感悟 写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批 ...

  8. 数据结构与算法Java(二)——字符串、矩阵压缩、递归、动态规划

    不定期补充.修正.更新:欢迎大家讨论和指正 本文以数据结构(C语言版)第三版 李云清 杨庆红编著为主要参考资料,用Java来实现 数据结构与算法Java(一)--线性表 数据结构与算法Java(二)- ...

  9. 数据结构与算法之暴力递归改动态规划

    数据结构与算法之暴力递归改动态规划 目录 二维数组最小路径和 暴力递归改动态规划解析 任意选择数组arr中的数字,看能不能累加得到aim 1. 二维数组最小路径和 (一) 题目描述 (二) 思路 递归 ...

  10. Java企业面试算法新得体会之4递归和动态规划问题17问

    递归和动态规划问题17问 题目真的难,好些题,一点头绪都没有 12月3号

最新文章

  1. YOLOv4官方改进版来了!指标炸裂55.8% AP!Scaled-YOLOv4:扩展跨阶段局部网络
  2. springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别
  3. AM335x(TQ335x)学习笔记——使用dtb方式启动内核
  4. 汇编语言(三十三)之四进制转十进制
  5. Scrapy 教程(十)-管道与数据库
  6. C++/C--删除string末尾字符的方法【转载】
  7. flask(五) cookie 和session
  8. matlab拟合不显示直线,新人求助一下MATLAB直线拟合问题
  9. Java三大特性的第一个分水岭——封装性
  10. Program E的Flash前端
  11. 关于ios打包的一些事项
  12. ug添加imachining变量_UG变量设置
  13. iOS程序员必读之热门书单
  14. python数据分析——网络流量的一些特性
  15. html5 心形照片墙,教你两种“心形拼图”法|制作照片墙,3分钟搞定!
  16. latex tex studio 表格大小 整体缩小 过长 过宽 跨栏 跨页
  17. 网站排名优化快排SEO网站源码
  18. halcon脚本-找直线并拟合
  19. jQuery给元素增加属性
  20. 郑州高新技术企业认定八大硬性条件是什么?

热门文章

  1. webpack打包样式资源_使用loader去打包css文件_打包less文件---webpack工作笔记004
  2. 大数据_Hbase-内容回顾和补充---Hbase工作笔记0018
  3. Dubbo学习笔记002---安装Zookeeper_并且安装Dubbo的管理控制台
  4. c++的学习笔记之二
  5. Windows Server 2008 R2 搭建FTP服务
  6. C语言和设计模式(命令模式)
  7. 一步一步写算法(之通用数据结构)
  8. 磁盘移臂调度实验_10 Swarm 的安装和基本的服务编排调度
  9. mysql中外键总结_mysql外键的一些总结
  10. mobaxterm下载与使用mobaxterm远程登录Linux