[ABC262G] LIS with Stack
Problem Statement
There is an empty sequence $X$ and an empty stack $S$. Also, you are given an integer sequence $A=(a_1,\ldots,a_N)$ of length $N$.
For each $i=1,\ldots,N$ in this order, Takahashi will do one of the following operations:
- Move the integer $a_i$ onto the top of $S$.
- Discard the integer $a_i$ from $A$.
Additionally, Takahashi may do the following operation whenever $S$ is not empty:
- Move the integer at the top of $S$ to the tail of $X$.
The score of the final $X$ is defined as follows.
- If $X$ is non-decreasing, i.e. if $x_i \leq x_{i+1}$ holds for all integer $i(1 \leq i \lt |X|)$, where $X=(x_1,\ldots,x_{|X|})$, then the score is $|X|$ (where $|X|$ denotes the number of terms in $X$).
- If $X$ is not non-decreasing, then the score is $0$.
Find the maximum possible score.
Constraints
- $1 \leq N \leq 50$
- $1 \leq a_i \leq 50$
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
$N$
$a_1$ $\ldots$ $a_N$
Output
Print the answer.
Sample Input 1
7
1 2 3 4 1 2 3
Sample Output 1
5
The following operations make the final $X$ equal $(1,1,2,3,4)$, for a score of $5$.
- Move $a_1=1$ onto the top of $S$.
- Move $1$ at the top of $S$ to the tail of $X$.
- Move $a_2=2$ onto the top of $S$.
- Discard $a_3=3$.
- Move $a_4=4$ onto the top of $S$.
- Move $a_5=1$ onto the top of $S$.
- Move $1$ at the top of $S$ to the tail of $X$.
- Move $a_6=2$ onto the top of $S$.
- Move $2$ at the top of $S$ to the tail of $X$.
- Move $a_7=3$ onto the top of $S$.
- Move $3$ at the top of $S$ to the tail of $X$.
- Move $4$ at the top of $S$ to the tail of $X$.
We cannot make the score $6$ or greater, so the maximum possible score is $5$.
Sample Input 2
10
1 1 1 1 1 1 1 1 1 1
正常dp很难做,这题其实有一点区间的感觉,考虑区间 dp.
首先发现其实放入栈再拿出其实就是反转操作。反转后还要满足递增.为了控制递增这个条件,我们需要给 dp 定义再加上值域两维去记录。定义 \(dp_{l,r,x,y}\) 代表从第 \(l\) 个数到第 \(r\) 个数进行操作,且最终序列的数再值域 \([x,y]\) 中时,最多能放入多少个数。
考虑是否把 \(a_l\) 放入栈中,如果不放,\(dp_{l,r,x,y}=dp_{l+1,r,x,y}\)
如果放入,首先要满足 \(a_l\in [x,y]\),然后枚举我把那个数放入后再弹出 \(a_l\),如果放入\(a_j\)后弹出 \(a_l\),那么\(dp_{l,r,x,y}\) 可以从 \(dp_{l,j,x,a_l}+dp_{j+1,r,a_l,y}\)。
#include<bits/stdc++.h>
using namespace std;
const int N=55;
int n,a[N],dp[N][N][N][N];
int dfs(int l,int r,int x,int y)
{
if(l>r||x>y)
return 0;
if(~dp[l][r][x][y])
return dp[l][r][x][y];
int ans=dfs(l+1,r,x,y);
if(a[l]<x||a[l]>y)
return dp[l][r][x][y]=ans;
for(int j=l;j<=r;j++)
ans=max(ans,dfs(l+1,j,x,a[l])+dfs(j+1,r,a[l],y)+1);
return dp[l][r][x][y]=ans;
}
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
printf("%d",dfs(1,n,1,50));
}
[ABC262G] LIS with Stack的更多相关文章
- B. Once Again... 解析(思維、DP、LIS、矩陣冪)
Codeforce 582 B. Once Again... 解析(思維.DP.LIS.矩陣冪) 今天我們來看看CF582B 題目連結 題目 給你一個長度為\(n\)的數列\(a\),求\(a\)循環 ...
- uva10635 LIS
Prince and PrincessInput: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n c ...
- POJ 2533 Longest Ordered Subsequence(LIS模版题)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 47465 Acc ...
- hdu 5256 LIS变形
给一个数列,问最少修改多少个元素使数列严格递增.如果不是要求“严格”递增,那就是求最长不降子序列LIS,然后n-LIS就是答案.要严格递增也好办,输入的时候用每个数减去其下标处理一下就行了. /* * ...
- HDU 5489 Removed Interval (LIS变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5489 给你n个数,要删去其中连续的L个,问你删去之后的LIS最大是多少? 我们先预处理出以i下标为开头 ...
- LIS (最长上升子序列)
LIS两种写法 O(n^2) dp[i]表示以a[i]结尾的为LIS长度 #include <algorithm> #include <iostream> #include & ...
- HDU5087——Revenge of LIS II(BestCoder Round #16)
Revenge of LIS II Problem DescriptionIn computer science, the longest increasing subsequence problem ...
- HDU-4742 Pinball Game 3D 三维LIS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4742 题意:求3维的LIS.. 用分治算法搞得,参考了cxlove的题解.. 首先按照x排序,然后每个 ...
- POJ 3670 , 3671 LIS
题意:两题意思差不多,都是给你一个序列,然后求最少需要改变多少个数字,使得成为一个最长不升,或者最长不降子序列. 当然3671是只能升序,所以更简单一点. 然后就没有什么了,用二分的方法求LIS即可. ...
- SPOJ 3937 - Wooden Sticks 最长上升子序列LIS
给了n个(n<=5000)木棍的长度hi与宽度wi(均小于10000),现在机器要打磨这些木棍,如果相邻连个木棍hi<=hj并且wi<=wj就不需要调整机器,问如何排序使得机器调整的 ...
随机推荐
- 【微信自动化】使用c#实现微信自动化
引言 上个月,在一个群里摸鱼划水空度日,看到了一个老哥分享的一个微信自动化的一个类库,便下载了他的Demo,其本意就是模拟鼠标来操作UI,实现UI自动化:然后自己在瞎琢磨研究,写了一个简单的例子,用来 ...
- COF框架集成mongodb驱动
今天打算在我的COF框架中集成mongodb驱动,这实在是简单的工作,因为基本上只是对pymongo的封装 数据库的集成大同小异,要考虑的点无非是以下几点: 1.命名 2.连接创建 3.连接池管理 4 ...
- Spring Boot中自动装配机制的原理
SpringBoot中自动装配机制的原理 1.自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC容器里面,不需要开发人员再去写Bean的装配配置, 2.在Spring Boot ...
- 谷粒商城微服务分布式高级篇:linux下使用docker安装ElasticSearch
[root@localhost ~]# docker pull elasticsearch:7.8.0 安装elasticsearch:7.8.0[root@localhost ~]# docker ...
- 「Semigroup と Monoid と Functional と」
一个被国内 oi 环境弱化至几乎不存在的概念,不过我觉得还是有学一学的必要.因为我没学过代数结构所以大部分内容都在开黄腔,欲喷从轻. Semigroup 的定义是,\(\forall a,b\in\m ...
- Linux下安装MySQL问题及报错解决
前言: 在Linux环境下,安装MySQL服务 环境: 虚拟机CentOS7 \-----------------------------------------------\ 流程: 确保mysql ...
- asp.net mvc Core 网页错误提示:An unhandled exception occurred while processing the request.处理请求时发生未处理的异常。
网页错误提示: An unhandled exception occurred while processing the request. InvalidOperationException: The ...
- Android 通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 btnstyle.xml的文件,内容如下: <?xml version="1.0&qu ...
- 漏洞扫描与安全加固之Apache Axis组件
一.Apache Axis组件高危漏洞自查及整改 Apache Axis组件存在由配置不当导致的远程代码执行风险. 1. 影响版本 Axis1 和Axis2各版本均受影响 2. 处置建议 1)禁用此服 ...
- 用阿里云镜像Centos7通过rpm和源码编译方式安装MySQL5版本
这里只说明安装和注意事项,更具体的配置如端口号.cnf文件配置等就不写了. 阿里云开源镜像站资源目录 (aliyun.com) 我用的是基础版本. 基础版本镜像是默认不联网的,可以用下面的命令ping ...