问题定义: 给定一个长度为N的数组A,找出一个最长的单调递增子序列(不要求连续)。 这道题共3种解法。1. 动态规划 动态规划的核心是状态的定义和状态转移方程。定义lis(i),表示前i个数中以A[i]结尾的最长递增子序列的长度。可以得到以下的状态转移方程:d(i) = max(1, d(j)...
分类:
其他好文 时间:
2015-08-12 18:43:08
阅读次数:
109
题意:
一排母牛站成一排,给出牛的身高,每只牛都只能往右看,对于每只母牛有一个c[i]
c[i]代表i能看见多少只牛,矮的牛看不见高的牛,问所有c[i]的和是多少。
思路:
我们转换一下,其实就是求对于每只母牛能被看见多少次,显然是对于它往左单调递增的牛都能看见它
那么我们维护一个这样的单调栈,每次都将小于等于它的出栈,那么栈中的元素的个数就是能看见它的个数
这样再把该元素插入栈就...
分类:
其他好文 时间:
2015-08-10 16:13:24
阅读次数:
95
称号:hdoj 5087 Revenge of LIS II题意:非常easy,给你一个序列,让你求第二长单调递增子序列。分析:事实上非常easy。不知道比赛的时候为什么那么多了判掉了。我们用O(n^2)的时间求单调递增子序列的时候,里面在加一层循环维护sum数组。表示前面有几个能够转移当当前,求前...
分类:
其他好文 时间:
2015-08-08 21:17:05
阅读次数:
115
题目1519:合并两个排序的链表题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和m(0 2 #include 3 u.....
分类:
编程语言 时间:
2015-08-06 11:03:26
阅读次数:
119
题目17
题目信息
运行结果
本题排行
讨论区
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出...
分类:
其他好文 时间:
2015-08-02 08:57:22
阅读次数:
127
单调栈单调栈顾名思义就是让栈中的元素是单调的,要么递增,要么递减。同样它也满足栈的性质,先进后出。
单调递增栈,则从栈顶到栈底的元素是严格递增的
单调递减栈,则从栈顶到栈底的元素是严格递减的
练习题单调栈
练习题
POJ3250
POJ2796
BZOJ1113
HDU1506
POJ2559
JDFZ2997POJ3250POJ3250传送门
对于每一个牛来说,能看到的数目为向右数身高比它小的个...
分类:
其他好文 时间:
2015-07-30 21:28:13
阅读次数:
208
题意:求柱状图中最大矩形面积。
单调栈:顾名思义就是栈内元素单调递增的栈。每次插入数据来维护这个栈,如果当前需要插入的数据小于栈顶的元素,那就一直弹出栈顶的元素,直到满足当前需要插入的元素大于栈顶元素为止。可以容易求出某个数左边或右边,第一个大于或小于它的数,且复杂度是O(n)O(n)。
思路:容易先想到一个好的枚举方式:以当前柱状为扩展点,往左边和右边扩展,当遇到一个比当前柱状小的柱状时停止扩展,...
分类:
其他好文 时间:
2015-07-20 13:03:53
阅读次数:
100
题意 给你n个数,然后求连续m个数的最小值和最大值
然后维护一个单调递增序列和一个单调递减序列
#include
#include
#include
using namespace std;
int last,head;
int n,m,k;
int a[1111111];
int que1[1111111];
int que2[1111111];
int ans1[1111111...
题目链接
题意:
给定一个1-n的排列
可以选择一个区间将其翻转。至多翻转三次。
问能不能变成单调递增的序列,并输出方案。
题目保证3次翻转一定有解。
思路:
爆搜,每次翻转一段最长的连续区间。
#include
#include
#include
#include
#include
template
inline bool rd(T &ret) {
char...
分类:
其他好文 时间:
2015-07-09 14:39:44
阅读次数:
121