洛谷P1410 子序列

P1410 子序列

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

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

输出样例#1:

Yes!
No!

说明

【数据范围】

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

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

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

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

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[2010],flag;
void dfs(int now,int pre1,int num1,int pre2,int num2){
    if(flag)return;
    if(now==n+1){
        if(num1==num2)flag=1;
        return;
    }
    if(a[now]>a[pre1]||pre1==0)dfs(now+1,now,num1+1,pre2,num2);
    if(a[now]>a[pre2]||pre2==0)dfs(now+1,pre1,num1,now,num2+1);
}
int main(){
    while(scanf("%d",&n)!=EOF){
        flag=0;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        dfs(1,0,0,0,0);
        if(flag)printf("Yes!\n");
        else printf("No!\n");
    }
}

60分 深搜

时间: 2024-10-15 05:38:51

洛谷P1410 子序列的相关文章

洛谷 P1410 子序列(DP)

这题的题解的贪心都是错误的...正解应该是个DP 考虑有哪些有关的条件:两个序列的当前长度, 两个序列的末尾数, 把这些都压进状态显然是会GG的 考虑两个长度加起来那一位的数一定是其中一个序列的末尾, 而我们要末尾的数尽量小, 所以完全可以把这个DP缩成两维 设f[i][j]为当前选到第i位, a[i]选入第一个序列, 则末尾为a[i], 第一个序列长度为j, 则第二个序列长度为i-j时第二个序列末尾的数最小为多少. 则有 if(a[i]<a[i+1]) f[i+1][j+1]=min(f[i+

洛谷 [T21776] 子序列

题目描述 你有一个长度为 \(n\) 的数列 \(\{a_n\}\) ,这个数列由 \(0,1\) 组成,进行 \(m\) 个的操作: \(1\ l\ r\) :把数列区间$ [l,r]$ 内的所有数取反.即 \(0\) 变成 \(1\) ,\(1\) 变成 \(0\) . \(2\ l\ r\) :询问数列在区间 \([l, r]\) 内共有多少个本质不同的子序列. 输入输出格式 输入格式: 第一行包含两个整数 \(n,m\),意义如上所述. 接下来一行包含 \(n\) 个数,表示数列 \(\

洛谷P2766-最长递增子序列问题

chunlvxiong的博客 题目描述: 给定正整数序列x1,...,xn (1≤n≤500). 1.计算其最长递增子序列的长度s. 2.计算从给定的序列中最多可取出多少个长度为s的递增子序列. 3.如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的递增子序列. 思考&分析:  第一问应该比较easy,利用DP求解,时间复杂度O(N^2)--利用线段树可以优化到O(NlogN),但是没这个必要. 第二问:考虑使用网络流求解. 首先把所有点x拆成两个点xa,xb,每

洛谷 P1439 【模板】最长公共子序列

神TM模板..我本来想休闲一下写点水题的... 开始做的时候直接敲了一个O(N2)的算法上去,编译的时候才发现根本开不下.. 好了,谈回这道题. 先不加证明的给出一种算法. 若有一组数据 2 4 2 5 1 3 2 5 4 1 3 那么我们令 4 2 5 1 3 | | | | | 1 2 3 4 5 第三行的数据就变成 2 3 1 4 5 很明显,答案是这个数据的最长上升子序列,即4 == 2 3 4 5,即原数列的2 5 1 3. 现在来大概的介绍一下这样做的原因. 首先,观察题目,注意到这

洛谷P1122 最大子树和 树形DP

洛谷P1122 最大子树和一道类似树形DP 的题目 首先我们随意定根 ,假设我们定根为 1, 那么我们设dp[ i ] 表示 在这个整个以1为根的树中 以 i为根的子树 i 这个点强制取到 , 我们再从他的子树中取出一部分出来,最大能够取到的和 我们可知 当 枚举到dp[ u ] 时 ,我们看他的儿子取不取 如果v是它的儿子 若dp[ v ] > 0 那么我们就取 ,否则就不取,取了反而会减少 这样类似最长连续子序列一样就行了 然后类似树形DP 一样从根节点向根扩展就行了 ,也就是dfs下去 然

洛谷P1198 [JSOI2008]最大数

P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都过了,洛谷竟然过不了… 为什么过不了 = =我想说这题加优读会WA?… 谁说pascal只能80,要换c++… 线段树为什么是80? 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超

【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]

以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入输出格

[洛谷OJ] P1114 “非常男女”计划

洛谷1114 “非常男女”计划 本题地址:http://www.luogu.org/problem/show?pid=1114 题目描述 近来,初一年的XXX小朋友致力于研究班上同学的配对问题(别想太多,仅是舞伴),通过各种推理和实验,他掌握了大量的实战经验.例如,据他观察,身高相近的人似乎比较合得来. 万圣节来临之际,XXX准备在学校策划一次大型的“非常男女”配对活动.对于这次活动的参与者,XXX有自己独特的选择方式.他希望能选择男女人数相等且身高都很接近的一些人.这种选择方式实现起来很简单.

BZOJ 4385 洛谷3594 POI2015 WIL-Wilcze do?y

[题解] 手残写错调了好久QAQ...... 洛谷的数据似乎比较水.. n个正整数!!这很重要 这道题是个类似two pointer的思想,外加一个单调队列维护当前区间内长度为d的子序列中元素之和的最大值. 枚举右端点,如果左端点到右端点的元素和减去区间内长为d的子序列中元素和的最大值,大于给定的P,那么就把左端点向右挪. #include<cstdio> #include<algorithm> #define N 2000010 #define rg register #defi