ybtoj「基础算法」第1章 递推算法强化训练贪心A. 1.划分数列
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ybtoj「基础算法」第1章 递推算法强化训练贪心A. 1.划分数列相关的知识,希望对你有一定的参考价值。
题面
样例
样例输入 1
6
1 2 3 2 2 1
样例输出 1
2
样例输入 2
9
1 2 1 2 1 2 1 2 1
样例输出 2
5
样例输入 3
7
1 2 3 2 1 999999999 1000000000
样例输出 3
3
解题思路
???????????????
我打了个贪心
???????????????
用 p 标记现在段是上升还是下降,然后就贪心往后找
#include <bits/stdc++.h>
using namespace std;
int n, num, p, a[100100];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
scanf("%d", &a[i]);
num = 1;
if(a[2] > a[1]) p = 1; else p = 2; //p = 1上升; p = 2下降
for(int i = 3; i <= n; i ++) {
if(p == 1) {
if(a[i] < a[i - 1]) { //下降了
num ++;
if(a[i + 1] > a[i]) p = 1; else p = 2; //后面可能也是上升,只是在 i 的位置和前面断开了(12323)
i ++;
}
} else {
if(a[i] > a[i - 1]) { //上升了
num ++;
if(a[i + 1] > a[i]) p = 1; else p = 2;
i ++;
}
}
}
printf("%d", num);
}
以上是关于ybtoj「基础算法」第1章 递推算法强化训练贪心A. 1.划分数列的主要内容,如果未能解决你的问题,请参考以下文章