专栏文章
题解:P1970 [NOIP2013 提高组] 花匠
P1970题解参与者 18已保存评论 19
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 19 条
- 当前快照
- 1 份
- 快照标识符
- @miqjypuu
- 此快照首次捕获于
- 2025/12/04 06:02 3 个月前
- 此快照最后确认于
- 2025/12/04 06:02 3 个月前
思路:
提供一个根本不需要数组的方法。
主要是看题解区都是用数组,所以这个不用数组的方法告诉大家。
这道题实际上只需要贪心找折线就可以了。
做法其实不是太难想。这道题其实就是找到一个最长的波浪序列(每一盆花都是波峰或波谷)。
首先,对于第一盆花,不论如何都要选,因为如果不选,第二盆花就相当于第一盆,而花的总数却减少了,所以一定不会更优。
对于第二盆花,如果和第一盆等高,就没有用,可以直接不选(这时候还是找第二盆);如果比第一盆高,那么它就一定要作为波峰(如果作为波谷则等同于第一盆没选);同理如果比第一盆低就一定是波谷。
对于后面的花,如果找波峰,如果当前花比上一盆高,那么波峰就找到了,接下来找波谷;如果不如上一盆高,那么用这盆更低的花继续找波峰结果一定不会更差。找波谷同理。
在操作过程中记录留下多少花即可。
code:
代码如果不懂可以私信我(记得关注我)。
CPP#include <bits/stdc++.h>
using namespace std;
int n, m, t = 0, ans = 1, cnt = -1;
int main() {
scanf("%d %d", &n, &m);
t = m;
for (int i = 2; i <= n; i++) {
scanf("%d", &m);
if (m > t && cnt != 1) {
cnt = 1;
ans++;
} else if (m < t && cnt) {
cnt = 0;
ans++;
}
t = m;
}
printf("%d\n", ans);
return 0;
}
相关推荐
评论
共 19 条评论,欢迎与作者交流。
正在加载评论...