精华内容
下载资源
问答
  • 这个可写死我了,从晚上六点写到晚上11点,终于写对了,hash_map真的可以,先 放上代码,理论等会当独开一篇文章: #include #include #include #pragma warning(disable:4786) using namespace std;...

    这个可写死我了,从晚上六点写到晚上11点,终于写对了,hash_map真的可以,先 放上代码,理论等会当独开一篇文章:

    #include<iostream>
    #include<vector>
    #include<hash_map>
    #pragma warning(disable:4786)
    using namespace std;
    
    struct Box{
    public:
    	int width;
    	int depth;
    	int height;
    	
    	Box(int w, int d, int h) :width(w), depth(d), height(h){}
    	Box() :width(0), depth(0), height(0){}
    	bool canBeAbove(Box bottom){
    		return (*this).depth > bottom.depth && (*this).height > bottom.height && (*this).width > bottom.width;
    	}
    
    };
    
    int stackHeight(vector<Box>& v){
    	int sumOfHeight = 0;
    	for (int i = 0; i < (int)v.size(); ++i)
    		sumOfHeight += v[i].height;
    	return sumOfHeight;
    }
    
    struct cmp_key
    {
    	enum
    	{   //   parameters   for   hash   table   
    		bucket_size = 4,   //   0   <   bucket_size   
    		min_buckets = 8  //   min_buckets   =   2   ^^   N,   0   <   N   
    	};
    	bool operator()(const Box &k1, const Box &k2)const
    	{
    		if (k1.width != k2.width)
    		{
    			return k1.width < k2.width;
    		}
    
    		if (k1.depth != k2.depth)
    		{
    			return k1.depth < k2.depth;
    		}
    		if (k1.height != k2.height)
    		{
    			return k1.height < k2.height;
    		}
    		return false;
    	}
    	
    	size_t operator() (const Box& b)const
    
    	{
    
    		return (b.depth + 10 * b.height + 100 * b.width) % 20;
    
    	};
    	
    };
    
    vector<Box> createStackDP(Box* boxes, Box& bottom, hash_map<Box, vector<Box>, cmp_key>& stack_map, int length){
    	hash_map<Box, vector<Box>, cmp_key>::iterator it = stack_map.find(bottom);
    	if (it != stack_map.end())
    		return stack_map[bottom];
    	stack_map.bucket_count();
    	int maxHeight = 0;
    	vector<Box> max_stack;
    	for (int i = 0; i < length; ++i){
    		if (boxes[i].canBeAbove(bottom)){
    			vector<Box> new_stack = createStackDP(boxes, boxes[i], stack_map,length);
    			int new_height = stackHeight(new_stack);
    			if (new_height > maxHeight){
    				max_stack = new_stack;
    				maxHeight = new_height;
    			}
    		}
    	}
    	max_stack.push_back(bottom);
    	stack_map[bottom] = max_stack;
    	return max_stack;
    }
    
    void show(Box result){
    	cout << result.height << "  ";
    }
    
    int layoutBoxes(Box* boxes,int length){
    	hash_map<Box, vector<Box>, cmp_key> sm;
    	vector<Box> result;
    	int old = 0;
    	for (int i = 0; i < length; ++i){
    		vector<Box> v = createStackDP(boxes, boxes[i], sm, length);
    		int new_height = stackHeight(v);
    		if (new_height > old){
    			old = new_height;
    			result = v;
    		}
    	}
    	for (int i = 0; i < (int)result.size(); ++i)
    		show(result[i]);
    	cout << endl;
    	return old;
    }
    
    int main(){
    	Box boxes[5];
    	boxes[0] = Box(1, 1, 1); boxes[1] = Box(3, 3, 3); boxes[2] = Box(2, 2, 2); boxes[3] = Box(5, 5, 5); boxes[4] = Box(4, 4, 4);
    	cout << layoutBoxes(boxes, sizeof(boxes) / sizeof(Box)) << endl;
    
    	cin.get();
    	return 0;
    }


    展开全文
  • 递归求解,求已某个箱子为底,返回最高可以放的箱子堆。 DP思想优化,对于已经求过的已某个箱子为底的情况,用一个map记录下来,以后直接返回即可。  注意一些clone等一些语言细节。 import java.util....

    递归求解,求出已某个箱子为底,返回最高可以放的箱子堆。

    DP思想优化,对于已经求过的已某个箱子为底的情况,用一个map记录下来,以后直接返回即可。

      注意一些clone等一些语言细节。

     

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class Solution {
    
        public ArrayList<Box> maxHeight(Box[] boxes) {
            Map<Box, ArrayList<Box>> cache = new HashMap<Box, ArrayList<Box>>();
            return maxHeight(boxes, null, cache);
        }
    
        private ArrayList<Box> maxHeight(Box[] boxes, Box bottom, Map<Box, ArrayList<Box>> cache) {
            // 用于实现DP的思想,注意每个返回值要clone一份,否则返回去之后cache中结果也会被外界引用的改变而改变。
            if (cache.containsKey(bottom))
                return (ArrayList<Box>) cache.get(bottom).clone();
            int maxHeight = 0;
            ArrayList<Box> res = new ArrayList<Box>();
            for (int i = 0; i < boxes.length; i++) {
                if (boxes[i].canAbove(bottom)) {
                    // 递归求解上面的箱子
                    ArrayList<Box> tmp = maxHeight(boxes, boxes[i], cache);
                    // 计算堆的高度
                    int curHeight = calcu(tmp);
                    if (curHeight > maxHeight) {
                        curHeight = maxHeight;
                        res = tmp;
                    }
                }
            }
    
            // 当前箱子加进去
            if (bottom != null)
                res.add(bottom);
            // 结果放入cache中用于dp
            cache.put(bottom, res);
    
            return res;
    
        }
    
        private int calcu(List<Box> list) {
            int res = 0;
            for (Box each : list) {
                res += each.h;
            }
            return res;
        }
    
        public static void main(String[] args) {
            Box[] boxes = { new Box(3, 4, 1), new Box(8, 6, 2), new Box(7, 8, 3) };
            System.out.println(new Solution().maxHeight(boxes));
    
        }
    }
    
    class Box {
        int w;
        int h;
        int d;
    
        public Box(int w, int h, int d) {
            this.w = w;
            this.h = h;
            this.d = d;
        }
    
        boolean canAbove(Box b) {
            if (b == null)
                return true;
            return w < b.w && h < b.h && d < b.d;
        }
    
        @Override
        public String toString() {
            return "Box [w=" + w + ", h=" + h + ", d=" + d + "]";
        }
    
    }

     

    转载于:https://www.cnblogs.com/jdflyfly/p/3932543.html

    展开全文
  • MVS旨在利用多张影像(影像及对应的相机几何)恢复三维场景。论文作者:香港科技大学和深圳Altizure公司的研究团队。简介: 该团队于2018年提出了一个精度效率的三维重建网络 —— MVSNet,被ECCV2018选为Oral...

    3abd082df4664bea8fd41e341eccff95.png

    1. 导读

    • 目标读者:对MVS(multi-view stereo,多视几何)问题感兴趣的人群。MVS旨在利用多张影像(影像及对应的相机几何)恢复出三维场景。
    • 论文作者:香港科技大学和深圳Altizure公司的研究团队。
    • 简介: 该团队于2018年提出了一个高精度高效率的三维重建网络 —— MVSNet,被ECCV2018选为Oral。而今针对原MVSNet由于过于耗费内存而难以应用到大尺度场景的问题,提出了“R-MVSNet”(Recurrent MVSNet),该网络在原MVSNet的基础上进行改进,引入循环神经网络架构,可依序地在深度方向通过GRU单元正则化2D的代价图,较大程度地缓解了内存消耗,进而使大尺度的三维场景重建成为可能,该文章已被CVPR2019接收。

    2. MVSNet回顾

    由于R-MVSNet是在原MVSNet上进行的改进,故对MVSNet进行回顾有一定必要性。

    MVSNet网络架构如图一所示:

    132244aec9bd56a50b6350aec1db5354.png

    输入进网络的多视影像首先经由2D的特征提取层以及可微的单应矩阵变换以构建代价量,再经由三维卷积网络的优化得到三维概率空间,最后基于参考影像进行进一步优化。

    MVSNet主要贡献在于:

    1. 通过可微单应矩阵(Differentiable Homography)将相机几何嵌入到网络,以帮助实现端到端的深度神经网络。
    2. 设计了基于方差的多视匹配代价计算准则,将任意数量的像素特征向量映射为一个匹配代价向量,以帮助网络适用于不定数量的图像输入。

    3. R-MVSNet介绍

    R-MVSNet相较于MVSNet,引入了循环神经网络架构,依序地在深度方向通过GRU单元正则化2D的代价图,以减少内存消耗进而使其适用于大尺度的三维场景重建。

    MVSNet网络架构如图二所示:

    dc351827adb9fa97ba1d8ba5c1f9e950.png

    输入的多视影像首先经由2D的特征提取层提取特征,经由可微的单应矩阵变换到参考影像的相机视锥体的正面平行面上,然后在不同深度计算代价,并经由卷积的GRU单元进行正则化,使在深度方向获取几何和单向的语义信息成为可能。该网络将问题视为分类问题,以交叉熵作为损失函数。

    在完整的三维重建的流程中,除去R-MVSNet所担任的生成深度图的模块,其他非学习的模块还包括预处理,深度图优化,深度图滤波与融合。

    4. 实验及结果

    网络在DTU数据集上进行训练,实现框架为tensorflow。

    测试数据集有DTU,Tanks and Temples,ETH3D( 图二:数据集具体结介绍见论文 )。

    在DTU数据集上进行测试的定量结果图如图三所示,结果表明就重建的完整性和整体的质量而言该方法优于其他的方法。重建效果如图四所示。

    dfe61b6d8fcc42cd5ad798b1daa7920f.png

    ce333e801cbf2fb0b5f2f0922b3504cd.png

    R-MVSNet和MVSNet在各测试数据集上的表现对比如图五所示,结果表明R-MVSNet的表现明显优于MVSNet,成倍地减小了内存消耗,可处理更大尺度的三维场景。

    84632e0942e0d90b802cc47f053c5ed1.png

    5. 论文及代码链接

    论文链接:https://arxiv.org/abs/1902.10556

    代码链接:https://github.com/YoYo000/MVSNet

    相关文章

    从零开始一起学习SLAM | 神奇的单应矩阵

    计算机视觉方向简介 | 从全景图恢复三维结构

    计算机视觉方向简介 | 阵列相机立体全景拼接

    计算机视觉方向简介 | 深度相机室内实时稠密三维重建

    计算机视觉life 精选文章大合集

    展开全文
  • 表中最高的薪水非常简单,编写下面的SQL即可: SELECT max(Salary) as HighestSalary FROM Employee; 利用查询的嵌套,也可以较为容易地找表中第二的薪水: SELECT max(Salary) FROM Employee WHERE ...

    假设有如下所示的员工薪水表:
    在这里插入图片描述
    找出表中最高的薪水非常简单,编写下面的SQL即可:

    SELECT max(Salary) as HighestSalary 
    FROM Employee;
    

    利用查询的嵌套,也可以较为容易地找出表中第二高的薪水:

    SELECT max(Salary) 
    FROM Employee WHERE Salary < (SELECT max(Salary) FROM Employee);
    

    不过,要是我们想找出第三高、第四高的薪水呢?有的人可能会说按照上面的思路,在SQL语句的外层再嵌套查询,不过这样写起来很麻烦,并且嵌套太多的子查询会影响性能。采用下面的SQL语句是个更好的选择:

    SELECT Salary FROM Employee ORDER BY Salary DESC LIMIT 1,1;
    

    其中LIMIT 1,1也可以写成LIMIT 1 OFFSET 1,事实上后面的写法更好。LIMIT N OFFSET M代表从第M+1行开始取N行。要求第三高、第四高、第N高的薪水,只需要将末尾改成LIMIT 1 OFFSET N-1即可。
    针对第N高的薪水这类问题,我们还可以自定义函数来解决。

    CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
    BEGIN
    DECLARE M INT;
    SET M=N-1;
      RETURN (
          SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET M
      );
    END
    

    注意,求第N高的薪水实际上是把表排序后偏移N-1行,因此需要先把N的值减1存在M中。

    展开全文
  • bug收集:专门解决与收集bug的网站网址:www.bugshouji.com01问 题如果将一个 img 放在 div 或 span 里面,你会发现在img下面无端端的就多3px的空白出来。padding、margin、border都设为0,无效!那么怎么解决这个...
  • RelativeLayout在弹软键盘的时候先寻找android:layout_alignParentBottom属性是否有控件设置为true,如果有将此控件向上移动键盘高度的位置,布局也就位于软键盘的上面,其他控件如果有相对于该控件的位置,也就...
  • 本文主要从工作经验中总结出来的经验总结sql语句优化问题,下面我们用Demo来具体说明如何提高sql的执行效率: ...上面的语句整整用了17.7秒!这么慢,用户可是等不了了,那么我们如何优化这句sql呢? 解决方
  • 箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子, 实现一个方法,搭最高的一堆箱子,箱堆的高度为每个箱子高度的总和。 分析:这是汉诺塔问题吗?不是,汉诺塔是将一推从底下最大...
  • 一般的做法都是在列表的上面,加几个搜索条件,然后最下面放一个搜索按钮,然后通过调用后台的Ajax进行过滤,然后调用JQuery等其他框架,进行 DOM书的更新,当然这个也是一个好的实现方法,但是就是有一点不太优雅。...
  • 点击上面蓝字关注我们微信号:xzgsgl超薄磨耗层摊铺技术是一种针对交通负载大、路面性能要求的路面解决方案,它不仅可应用于等级沥青路面或水泥路面的养护,也可以作为一种新建道路表面磨耗层。传统工艺的弊端...
  • 如图这里的tab页面,嵌套在页面中间的,上面下面都有东西, 如果正常设置高度宽度100%,滑动的时候页面显示的就不是100%了,而是比一个页面多,把上面的元素也加上去了,这样肯定不行的,我现在做的时候,就只让它...
  • map[i][j]==1表示第i个人上面可以放第j个人。 然后开始对每个人进行深度搜索,这个图中不可能有环。 所以对于每个人来说就是一棵树,搜索树的高度。 再找最高的高度即是答案。 [cpp]
  • 再来看看下面这个,真的让人啼笑皆非啊。看了上面2张动图,大家发现没有,所有的起因都是从点击一个单元格开始的。那为什么会这样呢?首先一点大家需要知道excel中有一个叫做VBA的东西,那什么是VBA呢?VBA(Visual ...
  • 果然,柜子要追求更的实用性,就不能按常理牌!你看,他家的做法多有远见,进门玄关柜虽同为顶天立地,但又大不同,让木工将柜子进行了二八分,下面上面多凸出20公分的样子▼这样做的好处嘛?从图中不难看出:...
  • 现在需要把这些模型都堆起来,而且为了使堆起来的模型不倒,上面的模型的宽度和长度必须小于下面的模型。请编写实现算法,求能堆的最高高度(这里的高度即堆起来的所有模型的高度之和) 输入描述: 第一行输入总...
  • 上面是题目,大致要求: W串是可疑串,P是输入串,在P中将出现的W串删除,然后输出P串; 下面是我写的代码: #include #include using namespace std; int main() { string s1,s2; //s1用于做可疑串,s2...
  • 软键盘弹问题

    2015-02-04 19:02:51
    在scollview中会自动弹软键盘且会压缩scollview的高度,下面显示软键盘,不在scollview中不会自动弹,手动弹时软键盘覆盖在布局上面,布局不压缩 2.stateUnspecified|adjustResize 在scollview中会
  • harbor的可用部署

    2020-12-10 15:04:42
    下面介绍可用版本harbor的部署。从harbor的官网可以看到,harbor依赖一些基础组件,如果做可用,则需要对依赖的租组件redis,postgresql,nginx等。 本文采用的可用方案是Harbor的双主复制,该方案比较...
  • 当我们在JS中使用构造函数new一个实例对象时,这个对象上就会有一些方法,比如toString()等,你没有没想过这些方法是哪儿来的?原构造函数上面的?不是,其实它是来自构造函数的原型对象上的,下面我们来看看关于...
  • C++的精度加法

    千次阅读 2018-07-17 19:43:54
    下面介绍一些关于精度的计算。 精度的计算主要就是模拟手工计算,比如加法,我们小学的时候通常学过使用竖式计算。 现在我们一起来回忆一下竖式计算的过程: 比如对于473+259,我们可以列竖式:  473 +...
  • Html内联元素采坑——元素底部多空白区域 ... 块级元素,如:div 内联元素,如:img、span、inline-block类型等 坑——请看下面代码和图片 ...上面的两个例子的这种情况,是由于内联元素的vertical-a
  • ZOJ 1093 最大高度

    2013-07-24 00:14:47
    叠在上面的箱子的地面的长宽必须严格小于下面的箱子,问能够到达的最大高度 解析:枚举每一种放置的形状,排序预处理,DP求最大高度 */ #include #include #include #include #include #include using namespace ...
  • 2020高中家庭教育心得 家庭教育,是孩子健康成长的重要堡垒,是教育优秀孩子前提条件,下面是小编精心整理的20xx高中家庭教育心得,欢迎大家学习和参阅。 20xx高中家庭教育心得 家长在教育是应该把握分寸,否则...
  • 并发的优化经验

    2020-06-17 19:28:30
    静态文件不能放到 SLB挂载的服务下面,影响性能。出口带宽受限,费用也挺;最好放到CDN上面 除了SLB有外网的域名外,其他的都是内网域名;内部服务之前的调用都得走内部网络 linux网络参数调优 ...
  • 高中军训总结200字.doc

    2021-01-15 18:01:30
     阅兵场上,一排排整齐的“立”在上面的是一片绿色,太阳此时很准时地从地平线上升起,从山的顶部蹦,发出耀眼的光芒,一缕缕阳光洒在这一排排迷彩上,形成了一道奇异的风景线,为这个世界增添了生机?..
  • Webpack高级配置(一)

    2020-08-22 19:30:40
    Webpack高级配置(一)一.如何配置多入口二.如何抽离压缩css文件三....③上面处理的是js文件下面处理html文件 首先webpack.common.js plugin生成多个 如果不写chunks,index和other的html文件会把entry入口的 inde
  • 下面是小编整理的高中读书心得600字,欢迎大家参阅。 高中读书心得600字: 外面下着淅淅沥沥的小雨,已经没有了清脆的鸟叫声,也没有孩子们玩耍时童真的笑声,有的就是从屋檐滴下的水珠打在窗户上的响声,"滴答,滴答.....
  • 大家在写div+css的时候经常会用到弹层,由于IE6的bug,所以当使用多个标签重复写弹层的时候会遇到后面的层压在了弹层的上面,这种问题在火狐浏览器下可以用z-index来解决,但是在IE6下面是不起作用的,下面的...
  • 本文实例为大家分享了Android仿...上面一个RecyclerView,下面一个小箭头ImageView,但后来发现没有必要,而且可定制化也不,还是使用多个TextView更好一点。 我封装了一下,只需要一个PopupList.java文件。源码放在
  • 下面的代码是一个弹提示框的例子: 代码如下: [removed] alert(“我是提示文字!”); [removed] 将上面部分代码,用文本编辑器(如写字板或其他更高级的编辑器,如 EditPlus 等)保存为 alert.html(或 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 926
精华内容 370
关键字:

上面出下面高