A. 1.划分数列

A . 1. 划 分 数 列 A. 1.划分数列 A.1.

A. 1.划分数列_第1张图片
A. 1.划分数列_第2张图片

氵水沝淼㵘解析

先预处理,然后公式推(详见代码)

Code

#include 
using namespace std;

int n, ans, a, b[100005], c[100005], f[100005];

int main ()
{
     
	int er;
	scanf ("%d%d", &n, &er);
	memset (f, 0x7ffff, sizeof (f));
	b[1] = c[1] = 1;
	f[0] = f[1] = 0;
	for (int i = 2; i <= n; ++ i) 
	{
     
		scanf ("%d", &a);
		if (a >= er) b[i] = b[i - 1]; else b[i] = i;	
		if (a <= er) c[i] = c[i - 1]; else c[i] = i;
		er = a;
	}
	for (int i = 1; i <= n; ++ i) f[i] = min (f[b[i] - 1] + 1, f[c[i] - 1] + 1);
	printf ("%d", f[n]); 
	return 0;	
}

你可能感兴趣的:(递推)