Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
来源:互联网 发布:什么是多线程编程 编辑:程序博客网 时间:2024/06/04 19:16
题目链接:点击打开链接
题目的意思很简单,就是求一个序列中的最长上升子序列,特殊的是可以改变该子序列中的一个数为任意数。
最开始是想法是,标记上一个非增元素位置k,dp[i] = dp[i -1] - dp[k] + 1。
后来发现这种想法是错误,因为,中间元素(也就是修改元素)要影响。所以,这种做法是错误的。
现在的问题是,自己的想法一定要去验证其正确性。
后来发现一种好的方法,就是求每一个元素的最大前缀下降和最大后缀上升。
然后,比较两侧的元素大小,就可以很好的求解出来了。
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define CLR(arr, val) memset(arr, val, sizeof(arr))using namespace std;const int N = 1e5 + 5;int main(){ int n, a[N], up[N], dw[N], dp[N]; scanf("%d", &n); CLR(up, 0); CLR(dw, 0);CLR(dp, 0); for(int i = 1; i <= n; i ++){ scanf("%d", &a[i]); } up[1] = 1; for(int i = 2; i <= n; i ++){ up[i] = a[i] > a[i - 1] ? up[i - 1] + 1: 1; } dw[n] = 1; for(int i = n - 1; i >= 1; i --){ dw[i] = a[i + 1] > a[i] ? dw[i + 1] + 1 : 1; } dp[1] = dw[2] + 1;//这里需要好好体味为什么会是这样. for(int i = 2; i < n; i ++){ if(a[i + 1] - a[i - 1] >= 2) dp[i] = max(dp[i], up[i - 1] + dw[i + 1] + 1); else dp[i] =max(dp[i], max(up[i - 1] + 1, dw[i + 1] + 1)); } dp[n] = up[n - 1] + 1; int ans = -1; for(int i = 1; i <= n; i ++) ans = max(dp[i], ans); printf("%d\n", ans); return 0;}
0 0
- Codeforces Round #FF (Div. 2):C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2) Problem C DZY Loves Sequences
- Codeforces Round #FF (Div. 2)C - DZY Loves Sequences
- Codeforces Round #FF (Div. 2)-C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2)C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2) C DZY Loves Sequences
- Codeforces Round #FF (Div. 2)C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2)C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2)-C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
- Codeforces Round #FF (Div. 二):C. DZY Loves Sequences
- Codeforces Round #FF (Div. 2) C - DZY Loves Sequences (DP)
- Codeforces Round #FF (Div. 2/C)/Codeforces446A_DZY Loves Sequences(DP)
- Codeforces Round #FF (Div. 2)446A - DZY Loves Sequences(最长上升子序列变形)
- Codeforces Round #FF (Div. 1) C - DZY Loves Fibonacci Numbers
- Codeforces Round #FF (Div. 1) C. DZY Loves Fibonacci Numbers
- sqlalchemy整理(二)
- HBase基础知识
- ASP.NET 安全认证(一)—— 如何运用 Form 表单认证 .(转)
- container_of()宏
- devkit8000程序的烧写signGP
- Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
- SQL Server数据类型int、bigint、smallint和tinyint范围简析
- test
- 23岁那年你正处在哪个状态?现在呢?
- 7.12 [NWPU][2014][TRN][4]搜索 C - 广搜 基础
- 十大基础实用算法之深度优先搜索和广度优先搜索
- 安卓开发之旅
- append与appendTo
- java处理高并发高负载类网站的优化方法