codeforces 446A DZY Loves Sequences
vjudge 上题目链接:codeforces 446A
大意是说最多可以修改数列中的一个数,求最长严格递增的连续子序列长度。
其实就是个 dp 的思想,想好思路后交上去没想到一直 wa 在第二个测试数据里,丧心病狂啊 T.T,后来才知道原来是分类讨论时没考虑全,而且下标也写拙了。
情况有三:
(1) 不作任何修改,直接遍历一遍求出的 in 数组和 de 数组即可。(其实这种情况不会优于(3),可以不用考虑)
(2) 修改的元素为最长递增子序列的中间结点,把左边的 in[i - 1] 加上右边的 de[i + 1] 再 +1 即原本这个元素。
(3) 修改的元素为最长递增子序列的首尾结点,所以这时候的值就是 in[i - 1] +1 或 de[i + 1] +1。(就是遗漏了这种情况啊,md)
然后,下标也要很注意,i 须取到 1 和 n;还要特判一下 n == 2 的情况,否则还是悲剧的 wa(T.T)。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf = 0x3fffffff;
const int N = ; int c[N], in[N], de[N]; void output(int *c, int l, int r, const char *s) {
puts("");
puts(s);
for(int i = l; i <= r; ++i)
printf("%d ",c[i]);
puts("\n");
} int main() {
int n;
while(~scanf("%d",&n)) {
for(int i = ; i <= n; ++i)
scanf("%d", c + i); if(n <= ) {
printf("%d\n",n);
continue;
} in[] = ;
for(int i = ; i <= n; ++i) {
if(c[i - ] < c[i]) in[i] = in[i - ] + ;
else in[i] = ;
} de[n] = ;
for(int i = n - ; i >= ; --i) {
if(c[i + ] > c[i]) de[i] = de[i + ] + ;
else de[i] = ;
} in[n + ] = de[n + ] = ; // 如上所说,ans 可以直接初始化为 0,不需要第 1 种情况
int ans = max(*max_element(in + , in + n + ), *max_element(de + , de + n + ));
// 下标很重要!!!
for(int i = ; i <= n; ++i)
if(c[i - ] <= c[i + ] - ) ans = max(ans, in[i - ] + de[i + ] + );
else ans = max(ans, max(in[i - ], de[i + ]) + );
printf("%d\n",ans);
}
return ;
}
codeforces 446A DZY Loves Sequences的更多相关文章
- Codeforces 446A. DZY Loves Sequences (线性DP)
<题目链接> 题目大意: 给定一个长度为$n$的序列,现在最多能够改变其中的一个数字,使其变成任意值.问你这个序列的最长严格上升子段的长度是多少. #include <bits/st ...
- CodeForces 446A DZY Loves Sequences (DP+暴力)
题意:给定一个序列,让你找出一个最长的序列,使得最多改其中的一个数,使其变成严格上升序列. 析:f[i] 表示以 i 结尾的最长上升长度,g[i] 表示以 i 为开始的最长上升长度,这两个很容易就求得 ...
- CodeForces - 446A DZY Loves Sequences(dp)
题意:给定一个序列a,求最长的连续子序列b的长度,在至多修改b内一个数字(可修改为任何数字)的条件下,使得b严格递增. 分析: 1.因为至多修改一个数字,假设修改a[i], 2.若能使a[i] < ...
- Codeforces Round #FF 446A DZY Loves Sequences
预处理出每一个数字能够向后延伸多少,然后尝试将两段拼起来. C. DZY Loves Sequences time limit per test 1 second memory limit per t ...
- Codeforces 447C - DZY Loves Sequences
447C - DZY Loves Sequences 思路:dp 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...
- codeforces 447C. DZY Loves Sequences 解题报告(446A)
题目链接:http://codeforces.com/problemset/problem/447/C 题目意思:给出 一个 包含 n 个数的序列你,从中需要找出这个序列的最长子串,满足在里面只修改其 ...
- codeforces C. DZY Loves Sequences
http://codeforces.com/contest/447/problem/C 题意:给你n个数的序列,然后让你改变其中的一个数,求得最长上升连续序列的长度值. 思路:先从左边开始求出连续递增 ...
- CodeForces 447C DZY Loves Sequences DP
题目:click here 题意:求给定序列更改其中一个元素后的最长连续上升子序列的长度 分析:最长的连续子序列有2种,一种是严格上升(没有更改元素)的长度加1,一种是两段严格上升的加起来. #inc ...
- codeforces#FF DIV2C题DZY Loves Sequences(DP)
题目地址:http://codeforces.com/contest/447/problem/C C. DZY Loves Sequences time limit per test 1 second ...
随机推荐
- android发送/接收json数据
客户端向服务器端发送数据,这里用到了两种,一种是在url中带参数,一种是json数据发送方式: url带参数的写法: url+/?r=m/calendar/contact_list&uid=3 ...
- zepto源码--核心方法9(管理包装集)--学习笔记
今天介绍的是与子元素相关的函数,children, find, contents children 从源码来看,主要是调用过滤函数filtered对遍历整个包装集返回的children进行过滤. 仔细 ...
- JS之访问器
1.在对象中定义get,set访问器属性 <script> var test = { _name:"pmx", _age:18, _born:1990, get nam ...
- partition-list
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- 系统隐式 Intent
1. 找出系统中所有视频 private void choiceFile() { Intent intent = new Intent(Intent.ACTION_PICK, android.prov ...
- windows服务的创建、安装、调试全过程及引发的后续学习
前几天做项目的时候需要用到window服务,研究一段时间,算是掌握了最基本的使用方法吧,现总结如下: 引言:在项目过程中碰到一个问题:需要不断的扫描一个大型数据库表,并获取dataset,以便做后续的 ...
- 多进程、协程、事件驱动及select poll epoll
目录 -多线程使用场景 -多进程 --简单的一个多进程例子 --进程间数据的交互实现方法 ---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享 ---Queues ---P ...
- DNS消息格式
一,简介 空谈误国,要让一大堆抽象的DNS概念落地,还是需要了解DNS消息格式的,本文会尽量详细地介绍DNS消息格式的每一个字段. 也可以移步rfc1035了解. 二,概览 DNS消息主要由五部分组成 ...
- IIS7 应用程序池设置成 经典 v2.0
HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipe ...
- Unable to create SVNRepository object
I think you are missing at least the library setup stuff: /* * Initializes the library to w ...