Description

给定一个长度为N(N为偶数)的序列,问能否将其划分为两个长度为N/2的严格递增子序列,

Input

若干行,每行表示一组数据。对于每组数据,首先输入一个整数N,表示序列的长度。之后N个整数表示这个序列。

Output

同输入行数。对于每组数据,如果存在一种划分,则输出“Yes!”,否则输出“No!“。

Sample Input

6 3 1 4 5 8 7
6 3 2 1 6 5 4

Sample Output

Yes!
No!

HINT

共三组数据,每组数据行数<=50,0 <= 输入的所有数 <= 10^9

第一组(30%):N <= 20

第二组(30%):N <= 100

第三组(40%):N <= 2000

题解

在前$i$位中找长$j$位的以第$i$位结尾的上升子序列(我们设这个为序列$A$),并且剩下的也是上升子序列(设这个为序列$B$),那么$f[i][j]$表示剩下的(即前i位中长$i-j$位的不以第$i$位结尾的)上升子序列(即序列$B$)的最后一位的最小值。

注意:$A$一定是以最后一个数结尾的。

然后转移:

如果$a[i]<a[i+1]$,那么$f[i+1][j+1] = min(f[i+1][j+1], f[i][j])$,意思就是将$a[i+1]$接在序列$A$后,相当于可以直接把$f[i][j]$扩展到第$i+1$位。

如果$f[i][j]<a[i+1]$,那么$f[i+1][i-j+1] = min(f[i+1][i-j+1], a[i])$,意思是将$a[i+1]$接在$B$后,相当于第$i+1$继承前$i$位中$i-j$位长的上升子序列,此时$B$序列的某尾为最后一个数,那么我们就要$swap(A,B)$。

 //It is made by Awson on 2017.9.27
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <string>
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define LL long long
using namespace std;
const int N = ;
void read(int &x) {
char ch; bool flag = ;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || ); ch = getchar());
for (x = ; isdigit(ch); x = (x<<)+(x<<)+ch-, ch = getchar());
x *= -*flag;
} int n, a[N+];
int f[N+][N+]; void work() {
for (int i = ; i <= n; i++)
read(a[i]);
memset(f, , sizeof(f));
int INF = f[][];
f[][] = -;
for (int i = ; i <= n; i++)
for (int j = ; j <= i; j++)
if (f[i][j] != INF) {
if (a[i] < a[i+]) f[i+][j+] = Min(f[i+][j+], f[i][j]);
if (f[i][j] < a[i+]) f[i+][i+-j] = Min(f[i+][i+-j], a[i]);
}
printf(f[n][n/] == INF ? "No!\n" : "Yes!\n");
}
int main() {
while (~scanf("%d", &n))
work();
return ;
}

[Luogu 1410]子序列的更多相关文章

  1. (luogu P1410)子序列 [TPLY]

    子序列 题目链接:https://www.luogu.org/problemnew/show/P1410 吐槽: 这道题做得我心累 本来想好好练一练dp 刷刷水题来练练手感 于是乎打开了(普及+/提高 ...

  2. Luogu P1410 子序列

    题目大意: 给定一个长度为\(N\)(\(N\)为偶数)的序列,] 问能否将其划分为两个长度为\(\frac{N}{2}\)的严格递增子序列, 输入一共有\(50\)组数据,每组数据保证\(N \le ...

  3. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  4. Luogu 3402 最长公共子序列(二分,最长递增子序列)

    Luogu 3402 最长公共子序列(二分,最长递增子序列) Description 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子可教,就给他布置了一个课后作业: ...

  5. Luogu 2766 - 最长不下降子序列问题 - [LIS问题][DP+网络流]

    题目链接:https://www.luogu.org/problemnew/show/P2766 题解(大量参考https://blog.csdn.net/ZscDst/article/details ...

  6. Libre 6005 「网络流 24 题」最长递增子序列 / Luogu 2766 最长递增子序列问题(网络流,最大流)

    Libre 6005 「网络流 24 题」最长递增子序列 / Luogu 2766 最长递增子序列问题(网络流,最大流) Description 问题描述: 给定正整数序列x1,...,xn . (1 ...

  7. luogu P2757 [国家集训队]等差子序列

    题目链接 luogu P2757 [国家集训队]等差子序列 题解 线段树好题 我选择暴力 代码 // luogu-judger-enable-o2 #include<cstdio> inl ...

  8. Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列)

    Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列) Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺 ...

  9. 【luogu P1637 三元上升子序列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1637 BIT + 离散化. 读题得数据规模需离散化.BIT开不到longint这么大的数组. 对于题目所求的 ...

随机推荐

  1. Hibernate——配置并访问数据库

    Hibernate,对于java来说很重要的一个东西,用于持久层.之前看了很多配置的,都不行,自己来写一个配置成功的. 环境:jdk1.8,eclipse-jee-oxygen,mysql-conne ...

  2. 2018.3.29 DIV位置调整代码

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  3. C语言实现Linux命令——od

    C语言实现Linux命令--od 实现要求: 复习c文件处理内容 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写M ...

  4. 【iOS】OC-AFNetworking 2.0 跟踪文件上传进度

    我是较新的 AFNetworking 2.0.使用下面的代码片段,我已经能够成功地将一张照片上传到我的 url.我想要跟踪的增量上载进度,但我找不到这样做 2.0 版的示例.我的应用程序是 iOS 7 ...

  5. windows 7 netsh wlan命令连接wifi

    显示本机保存的profiles,配置文件是以wifi的ssid命名的. netsh wlan show profiles 用netsh wlan connect name=00_1111 连接其中一个 ...

  6. Python内置函数(5)——pow

    英文文档: pow(x, y[, z]) Return x to the power y; if z is present, return x to the power y, modulo z (co ...

  7. Python内置函数(4)——min

    英文文档: min(iterable, *[, key, default]) min(arg1, arg2, *args[, key]) Return the smallest item in an ...

  8. hadoop2.6.0实践:003 检查hadoop是否可用

    start-dfs.sh start-yarn.sh 1.检查hdfs hdfs dfs -ls / http://localhost:50070 2.运行例子程序 hdfs dfs -ls / hd ...

  9. maven入门(8)maven的依赖管理

    我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependenci ...

  10. nodejs(1-1)

    http://www.runoob.com/nodejs/nodejs-tutorial.html