博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划 - 2016网易杭研面试题
阅读量:6551 次
发布时间:2019-06-24

本文共 1043 字,大约阅读时间需要 3 分钟。

问题描述

有一个边长为n的立方体,内部的每一个小立方体内有一个数字。如果取了当前这个小立方体,则小立方体的:

  1. 上下相邻两层将会消失;
  2. 前后相邻两列将会消失;
  3. 左右相邻两个将会消失;

找出一种取法,使得取到的数的sum最大,输出sum。

问题分析

现场面第三轮遇到了这一题,想了五分钟没想出来,面试官就不让想了TAT

回来想出了解法,当时现场面试还是有点紧张了,只想出了二维的做法.

对于这题,关键的地方在于找对DP的顺序:点-->线-->面

首先考虑规则3(左右相邻两个将会消失),可以将3维dp压缩到2维,且不会破环约束条件;

再来考虑规则2(前后相邻两列将会消失),可以将2维dp压缩到1维,且不会破环约束条件;

最后对1维的数组在进行一次dp,结果即为答案.

时间复杂度

由于需要遍历三维空间,故时间复杂度为O(N^3)。

代码

#include 
using namespace std;class Solution{public: int getMax(vector
> > &cube) { int n=cube.size(); vector
> dp2(n,vector
(n,0)); vector
tp(n); // 3D zip to 2D for(int i=0;i
dp1(n,0); // 2D zip to answer for(int i=0;i
& nums) { int n=nums.size(); vector
dp(n,0); dp[0]=nums[0]; for(int i=1;i
> > cube(n,vector
>(n,vector
(n,0))); for(int i=0;i

测试数据

/*-----------------------131 2 34 5 67 8 910 11 1213 14 1516 17 1819 20 2122 23 2425 26 27-----------------------112*/

 

转载于:https://www.cnblogs.com/crazyacking/p/5376387.html

你可能感兴趣的文章
windows上运行npm Error: ENOENT, stat 'C:\Users\
查看>>
PHP导出Excel,PHP输入Excel
查看>>
打印乘法表的几种方式
查看>>
Android与服务器网络传输方式选择
查看>>
Linux操作系统定时任务系统 Cron 入门
查看>>
Play 2.0 中文资料--翻译附注解(持续更新中)
查看>>
java 自定义注解
查看>>
我的友情链接
查看>>
PHP设计模式之观察者模式
查看>>
Ubuntu install LaTex (中文环境)
查看>>
Zabbix服务器yum安装
查看>>
还没结婚就死了怎么办?
查看>>
深入解读阿里云数据库POLARDB核心功能物理复制技术
查看>>
windows2012加oracle11G双机热备
查看>>
记几次面试经历
查看>>
顶部标题栏:自定义ActionBar风格和样式
查看>>
基于流复制的PostgreSQL9.1 Hot Standby数据库搭建
查看>>
SQL2005镜像:一个或多个服务器网络地址缺少完全限定域名(FQDN )
查看>>
矩阵的几何解释(转自 天行健 君子当自强而不息 )
查看>>
我的友情链接
查看>>