lintcode 最长上升连续子序列 II(二维最长上升连续序列)

题目链接:http://www.lintcode.com/zh-cn/problem/longest-increasing-continuous-subsequence-ii/

最长上升连续子序列 II  

  给定一个整数矩阵(其中,有 n 行, m 列),请找出矩阵中的最长上升连续子序列。(最长上升连续子序列可从任意行或任意列开始,向上/下/左/右任意方向移动)。

样例

给定一个矩阵

[[1 ,2 ,3 ,4 ,5],[16,17,24,23,6],[15,18,25,22,7],[14,19,20,21,8],[13,12,11,10,9]
]

返回 25

思路:记忆化搜索 + dp

  设Lics(num)表示以num开头的最长上升子连续序列的长度, 则Lics(A[x][y]) = max(Lics(A[x-1][y]), Lics(A[x][y-1]), Lics(x+1,y), Lics(x, y+1))+1;

#include<iostream> 
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<deque>
#include<map> 
using namespace std;class Solution {
public:/*** @param A an integer matrix* @return  an integer*/int n, m, maxL;int lics[1000][1000];int vis[1000][1000];int dir[4][2] = {{0, 1}, {1, 0}, {0,-1}, {-1,0}};int dfs(vector<vector<int>>& A, int x, int y){int maxLics = 0;vis[x][y] = 1;for(int i=0; i<4; ++i){int xx = x+dir[i][0];int yy = y+dir[i][1];if(xx<0 || yy<0 || xx>=n || yy>=m) continue;if(A[x][y] >= A[xx][yy]) continue;if(!vis[xx][yy])maxLics = max(maxLics, dfs(A, xx, yy));elsemaxLics = max(maxLics, lics[xx][yy]);}lics[x][y] = maxLics+1;if(maxL < lics[x][y]) maxL = lics[x][y];return lics[x][y];} int longestIncreasingContinuousSubsequenceII(vector<vector<int>>& A) {n = A.size();if(n == 0) return 0;m = A[0].size();memset(lics, 0, sizeof(lics));memset(vis, 0, sizeof(vis));maxL = 0;for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)if(!vis[i][j])dfs(A, i, j);return maxL;}
};
/*
1 2 3 4 5
16 17 24 23 6
15 18 25 22 7
14 19 20 21 8
13 12 11 10 9
*/

 

转载于:https://www.cnblogs.com/hujunzheng/p/4986801.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适用于Linux的Windows子系统WSL

以前使用的都是在虚拟机里安装linux&#xff0c;最近才发现在win10提供了WSL(Windows Subsystem for Linux) &#xff0c;简单来说就是可以在win10里面直接使用Linux。 &#xff08;一&#xff09;首先打开Microsoft Store , 搜索 Linux &#xff08;二&#xff09;选择自己需…

jsp通过易宝方式实现在线支付

项目下载地址: https://github.com/hjzgg/OnlinePayment 参考&#xff1a;http://blog.csdn.net/jadyer/article/details/7380259?utm_sourcetuicool&utm_mediumreferral 效果图1&#xff1a;请求界面 效果图2&#xff1a;地支付请求和易宝之间建立连接之后跳转到相应的银…

permission denied是什么鬼?

问题&#xff1a;在PC端编译了一个arm芯片的测试程序&#xff0c;出现了permission denied 解决办法&#xff1a; 1.给文件赋予可执行权限 chmod ax xxx这是一般第一反应会想到的答案 2. 有时候已经有可执行权限&#xff0c;还是提示上面的错误此时要注意你的交叉编译器是否正…

CSS中div覆盖另一个div

将一个div覆盖在另一个div上有两种手段&#xff1a;一是设置margin为负值&#xff0c;二是设置绝对定位。 可以根个人情况设置z-index的值 1->position 为absolute的情况 <html> <head> <style> #div1{position:absolute;width:300px;height:300px;backgr…

nand flash和nor flash的这几点区别你知道吗?

这篇文章讲解nand flash和nor flash的特点和区别&#xff0c;不涉及存储原理的讲解 &#xff08;一&#xff09;Flash简介 FLASH是一种存储芯片&#xff0c;全名叫Flash EEPROM Memory&#xff0c;通地过程序可以修改数据&#xff0c;即平时所说的“闪存”。Flash又分为NAND f…

c++堆

c reference: http://www.cplusplus.com/reference/algorithm/make_heap/ heap并不属于STL容器组件&#xff0c;它分为 max heap 和min heap&#xff0c;在缺省情况下&#xff0c;max-heap是优先队列&#xff08;priority queue&#xff09;的底层实现机制。 而这个实现机制中的…

关于Ubuntu拒绝root用户ssh远程登录

今天使用SecureCRT远程登陆Ubuntu时一直提示密码或用户名错误&#xff0c;实际输入是正确的&#xff0c;我按照网上教程改还是不行&#xff0c;后来才想起来我是root登录的&#xff0c;Ubuntu默认的ssh远程root登录是关闭的&#xff0c;在这里记录一下 1.编辑配置文件 #sudo v…

windows8建立局域网的方法

win8建立局域网的方法&#xff1a;1、首先笔记本有无线网卡且支持 虚拟WIFI ;2、按winX键&#xff0c;选择"命令提示符(管理员)A"; 3、输入"netsh wlan set hostednetwork modeallow ssid网络名称 key我的密码" ; 4、接着输入"netsh wlan start hoste…

内核移植出现:Kernel panic - not syncing: No init found.

今天在升级SDK的时候&#xff0c;升级到kernel时遇到如题所述的问题&#xff0c;花了天时间调通&#xff0c;在这里记录一下。 报错提示&#xff1a;(当时没有记录&#xff0c;错误的提示大概如下) Kernel panic - not syncing: No init found. Try passing init option to k…

lintcode Permutation Index

题目&#xff1a;http://www.lintcode.com/zh-cn/problem/permutation-index/ 排列序号 给出一个不含重复数字的排列&#xff0c;求这些数字的所有排列按字典序排序后该排列的编号。其中&#xff0c;编号从1开始。 样例 例如&#xff0c;排列[1,2,4]是第1个排列。 思路&#xf…

32位和64位机器上C语言数据类型的大小

作为嵌入式开发的人员&#xff0c;是必须了解C语言在不同位数机器上占用的字节大小的&#xff0c;下面做下对比 不同位数平台对比&#xff1a; \16位平台32位平台64位平台char1个字节8位1个字节8位1个字节short2个字节16位2个字节16位2个字节int2个字节16位4个字节32位 4个字节…

lintcode循环数组之连续子数组求和

v 题目&#xff1a;连续子数组求和 II给定一个整数循环数组&#xff08;头尾相接&#xff09;&#xff0c;请找出一个连续的子数组&#xff0c;使得该子数组的和最大。输出答案时&#xff0c;请分别返回第一个数字和最后一个数字的值。如果多个答案&#xff0c;请返回其中任意一…

lintcode最长回文子串(Manacher算法)

题目来自lintcode, 链接&#xff1a;http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 最长回文子串 给出一个字符串&#xff08;假设长度最长为1000&#xff09;&#xff0c;求出它的最长回文子串&#xff0c;你可以假定只有一个满足条件的最长回文串。…

全排列总结

接触全排列已经好长时间了&#xff0c;一直没有抽空总结一下全排列的相关问题&#xff0c;下面来说一下&#xff01; 排列 一般地&#xff0c;从n个不同元素中取出m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排成一列&#xff0c;叫做从n个元素中取出m个元…

大小端问题傻傻分不清?

先来熟悉一下概念&#xff1a; 大端&#xff1a;数据的高位数据保存在低位地址&#xff0c;数据的低位数据保存在高地址 小端&#xff1a;数据的高位数据保存在高位地址&#xff0c;数据的低位数据保存在低地址为什么会存在大小端的问题&#xff1f; 这是因为在计算机系统中&a…

n个结点,不同形态的二叉树(数目+生成)

题目链接&#xff1a; 不同的二叉查找树&#xff1a;http://www.lintcode.com/zh-cn/problem/unique-binary-search-trees/ 不同的二叉查找树 II&#xff1a;http://www.lintcode.com/zh-cn/problem/unique-binary-search-trees-ii/ 不同形态二叉树的数目&#xff1a; 样例 给出…

c++ stringstream(老好用了)

前言&#xff1a; 以前没有接触过stringstream这个类的时候&#xff0c;常用的字符串和数字转换函数就是sscanf和sprintf函数。开始的时候就觉得这两个函数应经很叼了&#xff0c;但是毕竟是属于c的。c中引入了流的概念&#xff0c;通过流来实现字符串和数字的转换方便多了。在…

mount --bind的用处

&#xff08;一&#xff09;mount --bind介绍 mount --bind的作用是将两个目录连接起来&#xff0c;例如&#xff1a;mount ---bind /dir1 /dir2 是将dir1目录挂载到dir2目录上&#xff0c;下面来实际演示一下&#xff1a; 上面的操作中首先创建了dir1 dir2两个目录&#xf…

gcc -strip编译选项的作用

从字面上来看strip的意思是脱衣服、拆卸&#xff0c;那么gcc --strip的作用大概能猜错来了。 没错就是有选择地除去行号信息、重定位信息、调试段、typchk 段、注释段、文件头以及所有或部分符号表。 一旦使用该命令&#xff0c;则很难调试文件的符号&#xff0c;因此&#x…

lintcode 落单的数(位操作)

题目1 落单的数 给出2*n 1 个的数字&#xff0c;除其中一个数字之外其他每个数字均出现两次&#xff0c;找到这个数字。 链接&#xff1a;http://www.lintcode.com/zh-cn/problem/single-number/ 样例 给出 [1,2,2,1,3,4,3]&#xff0c;返回 4 挑战 一次遍历&#xff0c;常数级…