题目链接:http://codeforces.com/problemset/problem/447/C

题目意思:给出 一个 包含 n 个数的序列你,从中需要找出这个序列的最长子串,满足在里面只修改其中一个元素,使得这个子串的元素严格递增,求出这个长度是多少。

  以为是DP题(它的分类确实是DP题),无从下手。看了下别人写的,有些部分不太明白;根据自己的理解再结合一些别人的,加了些特判,总算过了^_^,我好像觉得我的做法不像是用了DP思想咯........

总体思路就是:设两个数组,分别为inc_left[] 和 inc_right[],顾名思义,对于第 i 个元素,inc_left[i]就是从左到右扫描序列,到达这个inc_left[i]元素的时候,它的递增长度是多少。举个例子,对于test 1 中的   7  2  3   1  5   6

inc_left[i]为: 1  1  2   1   2   3

对于6这个数来说,inc_left[6] = 3 是因为 1 5 6 严格递增。而为什么有些inc_left[i] = 1,是因为前面加上自己,不构成递增序列。inc_right[]依次类推。

这两个数组结合起来就可以求出 2 3 1 5 6 的情况了,即对于某个a[i],只改变a[i]这个数,使得以这个a[i] 为原点,左右扩散起来,能够构成的最长递增序列。

要注意一些特判,例如,当n  = 1 时直接输出1;如果输入序列本来已经严格递增,直接输出n。最后一种情况就是,1 1 这种,只改变其中一个元素,答案为2,代码中的

ans = max(ans, max(inc_left[i]+1, inc_right[i]+1));   就是为了应对这种情况的。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int N = 1e5 + ;
int a[N], inc_left[N], inc_right[N]; int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
memset(a, , sizeof(a));
for (int i = ; i <= n; i++)
scanf("%d", &a[i]);
if (n == )
printf("1\n");
else
{
int ans = ;
inc_left[] = ;
for (int i = ; i <= n; i++)
{
inc_left[i] = (a[i] > a[i-] ? inc_left[i-]+ : );
ans = max(ans, inc_left[i]);
}
inc_right[n] = ;
for (int i = n-; i >= ; i--)
{
inc_right[i] = (a[i+] > a[i] ? inc_right[i+]+ : );
ans = max(ans, inc_right[i]);
}
if (ans == n) // 处理序列本来就是递增情况
printf("%d\n", n);
else
{
for (int i = ; i <= n; i++)
{
if (a[i+] > a[i-]+) // 这两种情况需排除:1 ? 2 或 1 ? 1,可以更改的至少需要满足1 ? 3
ans = max(ans, inc_right[i+]+inc_left[i-]+);
else
ans = max(ans, max(inc_left[i]+, inc_right[i]+)); // 处理 1 1的情况,只能更改其中一个
}
printf("%d\n", ans);
}
}
}
return ;
}

codeforces 447C. DZY Loves Sequences 解题报告(446A)的更多相关文章

  1. Codeforces 447C - DZY Loves Sequences

    447C - DZY Loves Sequences 思路:dp 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...

  2. codeforces 445B. DZY Loves Chemistry 解题报告

    题目链接:http://codeforces.com/problemset/problem/445/B 题目意思:给出 n 种chemicals,当中有 m 对可以发生反应.我们用danger来评估这 ...

  3. CodeForces - 445A - DZY Loves Chessboard解题报告

    对于这题本人刚开始的时候觉得应该用DFS来解决实现这个问题,但由于本人对于DFS并不是太熟,所以就放弃了这个想法: 但又想了想要按照这个要求实现问题则必须是黑白相间,然后把是字符是'B'或'W'改为' ...

  4. CodeForces 447C DZY Loves Sequences DP

    题目:click here 题意:求给定序列更改其中一个元素后的最长连续上升子序列的长度 分析:最长的连续子序列有2种,一种是严格上升(没有更改元素)的长度加1,一种是两段严格上升的加起来. #inc ...

  5. 【BZOJ3309】DZY Loves Math 解题报告

    [BZOJ3309]DZY Loves Math Description 对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数.例如\(f(1960)=f(2^3×5^1×7^ ...

  6. codeforces C. DZY Loves Sequences

    http://codeforces.com/contest/447/problem/C 题意:给你n个数的序列,然后让你改变其中的一个数,求得最长上升连续序列的长度值. 思路:先从左边开始求出连续递增 ...

  7. codeforces 450B. Jzzhu and Sequences 解题报告

    题目链接:http://codeforces.com/problemset/problem/450/B 题目意思:给出 f1 和 f2 的值,以及n,根据公式:fi = fi-1 + fi+1,求出f ...

  8. Codeforces Round #FF 446A DZY Loves Sequences

    预处理出每一个数字能够向后延伸多少,然后尝试将两段拼起来. C. DZY Loves Sequences time limit per test 1 second memory limit per t ...

  9. [CodeForces - 447C] C - DZY Loves Sequences

    C - DZY Loves Sequences DZY has a sequence a, consisting of n integers. We'll call a sequence ai, ai ...

随机推荐

  1. 准备 KVM 实验环境

    KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...

  2. AC日记——凌乱的yyy 洛谷 P1803

    题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加 ...

  3. db2 获取自增主键的方法

    1.用SEQUENCES方式 建表语句 CREATE TABLE TEST1( PKEY INTEGER NOT NULL, NAME VARCHAR(100), SEX VARCHAR(100), ...

  4. 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)

    DJ DJ是Disc Jockey的缩写,是电音圈子里的一种热门职业,一般大家在夜店或者酒吧看到的站在台上甩着膀子拧着按钮或者使劲儿搓碟的就是DJ啦. DJ的主要工作一般就是在现场用打碟机和混音台把许 ...

  5. Javascript构造函数和原型

    相信你已经知道了,Javascript函数也可以作为对象构造器.比如,为了模拟面向对象编程中的Class,可以用如下的代码 function Person(name){ this.name = nam ...

  6. ImportError: No module named _curses;Color support is disabled, python-curses is not installed.解决办法

    linux系统默认安装了python2.6, 但是发现python2.7 import curses时 提示 找不到_curses 错误.  用pip(python2.7 )安装了curses-204 ...

  7. Qt5官方demo解析集30——Extending QML - Binding Example

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集29--Extendin ...

  8. annotation使用示例

    annotation使用示例 学习了:https://www.imooc.com/learn/456 Annotation编写规则:@Target,@Retention,设置一些String.int属 ...

  9. 使用squid架设自己的代理server

    主要參考了 http://blog.chinaunix.net/uid-20778906-id-540115.html Ubuntu下Squid代理server的安装与配置 1 安装 $ sudo a ...

  10. asp.net mvc 性能优化——(1)静态化

    asp.net mvc 性能优化--(1)静态化 在改善页面性能的同时,可能会采用静态化的策略,对于不能实时静态化的内容,则采用缓存.本文主要讨论如何实现cshtml的静态化(实际上还不是完全的htm ...