璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:luogup1970
problems
名称花匠
题目编号2013 NOIP TG D2T2
题目链接luogu.com.cn/…
来源CCF
算法分类动态规划, 线性动态规划
难易程度小有难度

花匠

想法

题目期望求最长的波浪,而每一个下降的相邻对,都可以与之前的上升趋势形成波浪;如果之前依旧是下降,则下降趋势保持不变。所以设置到每个元素是什么趋势的状态。f[i][1]表示到第i个数是上升,f[i][0]表示到第i个数是下降。第i个与第i-1进行比较,两数的趋势影响转移。如果都是下降,那上升是不会转移的。

代码实现

#include<cstdio>
 
const int N = 1e5+10;
int line[N], f[N][2];
int main() {
	int n;
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
		scanf("%d", &line[i]);
	f[1][1] = f[1][0] = 1;
	//1 表示上升, 0 表示下降
	for(int i=2; i<=n; i++) {
		if(line[i] > line[i-1])
			f[i][1] = f[i-1][0] + 1;
		else
			f[i][1] = f[i-1][1];
		if(line[i] < line[i-1])
			f[i][0] = f[i-1][1] + 1;
		else
			f[i][0] = f[i-1][0];
	}
	printf("%d", f[n][1] > f[n][0] ? f[n][1] : f[n][0]);
	return 0;
}
/app/www/public/data/pages/icpc/problems/luogup1970.txt · 最后更改: 2024/03/22 14:51 由 温婕莺