NYOJ 370 波动序列
来源:互联网 发布:mac win7下隐藏dock 编辑:程序博客网 时间:2024/04/30 09:14
波动序列
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
有一个长度为N的整数序列,序列里面的数是两两不同的,现在要在里面找一个波动序列,这个序列越长越好。
比如有波动序列{a0,a1,a2…an-1},则a0 > a1 < a2 > a3 < …
- 输入
- 第一行输入一个数T,代表有T个任务,T不大于50。
对于每个任务,输入格式为
N a0 a1 a2 … aN-1
其中N<=30000,测试数据保证序列的数两两不同。 - 输出
- 对于每个任务,输出最长的波动序列长度
- 样例输入
45 1 2 3 4 55 5 4 3 2 15 5 1 4 2 35 2 4 1 3 5
- 样例输出
1253
/*读完这个题,我的第一感觉是:这是个dp问题。如果用普通方法做,时间复杂度是O(n^2),会超时。 后来想了一下,只需要判断是递增或递减就行了,O(n)时间复杂度。 即:对于当前的点,1、如果要找递增序列:如果下一个点比当前的点大,序列长度加1,更新下一个点为当前点; 如果下一个点比当前点小,长度不变,同样更新下一个点为当前点,而且有利于找出递增序列 找递减序列的方法与找递增序列的方法一致。*/#include<stdio.h>int a[30003];int main(){ int T,N,i,flag,len,now; scanf("%d",&T); while(T--) { scanf("%d",&N); for(i=0;i<N;i++) scanf("%d",&a[i]); now=a[0]; flag=1;/*flag=0表示要找递增序列,flag=1表示要找递减序列*/ len=1; for(i=1;i<N;i++) { if(!flag&&a[i]>now) { flag=1; len++; } else if(flag&&a[i]<now) { flag=0; len++; } now=a[i]; } printf("%d\n",len); } return 0;}
- NYOJ 370 波动序列
- nyoj 370-波动序列
- NYOJ 370 波动序列
- NYOJ 370 波动序列
- NYOJ 370 波动序列 dp 动态规划
- NYOj题目370波动序列(dp)
- NYOJ 370 波动序列 (有意思的题)
- 波动序列
- 波动序列
- 波动序列
- 波动序列解题报告
- 最长波动序列【模拟】
- NYOJ370-波动序列
- 洛谷P3929波动序列
- Tyvj 1521 最长波动序列
- 求解最长的波动序列
- hrbust 1131 波动序列【水题】
- 【NOIP2013花匠】(最长波动序列)
- js去除结尾字符串
- HBase有感(二)
- hdu2276 Kiki & Little Kiki 2
- 如何成为一位优秀的创业CEO
- C++指针数组和指向指针的指针
- NYOJ 370 波动序列
- android 备忘录1
- #define总结
- 从CAP定理联想到公司模式SMP
- Redis 的数据结构,持久化和主从同步
- excel下拉菜单
- 一个监控脚本
- 如何解决Android中输入法挡住输入框的问题
- EIE531:Radio Mobile Communication- Introduction(Chapters1-2)