记录编号 149941 评测结果 AAAAAAAAAA
题目名称 [HNOI 2010] 合唱队 最终得分 100
用户昵称 Gravatarztx 是否通过 通过
代码语言 C++ 运行时间 0.080 s
提交时间 2015-02-27 08:55:55 内存使用 8.08 MiB
显示代码纯文本
/****************************************\
* Author : ztx
* Title  : [bzoj] 1996: [Hnoi2010]chorus 合唱队
* ALG    : dp
* CMT    :
* Time   :
\****************************************/

#include <cstdio>

int CH , NEG ;
inline void read(int& ret) {
    ret = NEG = 0 ; while (CH=getchar() , CH<'!') ;
    if (CH == '-') NEG = true , CH = getchar() ;
    while (ret = ret*10+CH-'0' , CH=getchar() , CH>'!') ;
    if (NEG) ret = -ret ;
}

inline void reads(int& ret) {
	while (ret=getchar() , ret<'!') ;
	while (CH=getchar() , CH>'!') ;
}

#define  maxn   1010LL
#define  ansmod 19650827LL

int n ;
int h[maxn] = {0} ;
int f[maxn][maxn][2] = {0} ;

int main() {
int i , d , L , R ;
	#define READ
	#ifdef  READ
		freopen("chorusu.in" ,"r",stdin ) ;
		freopen("chorusu.out","w",stdout) ;
	#endif
	read(n) ;
	for (i = 1 ; i <= n ; i ++ )
		read(h[i]) , f[i][i][0] = 1 ;
	for (d = 2 ; d <= n ; d ++ )
		for (R = d ; R <= n ; R ++ ) {
			L = R-d+1 ;
			if (h[L] < h[L+1])
				f[L][R][0] += f[L+1][R][0] ,
				f[L][R][0] %= ansmod ;
			if (h[L] < h[R])
				f[L][R][0] += f[L+1][R][1] ,
				f[L][R][0] %= ansmod ;
			if (h[R] > h[L])
				f[L][R][1] += f[L][R-1][0] ,
				f[L][R][1] %= ansmod ;
			if (h[R] > h[R-1])
				f[L][R][1] += f[L][R-1][1] ,
				f[L][R][1] %= ansmod ;
		}
	printf("%d\n", (f[1][n][0]+f[1][n][1])%ansmod) ;
	#ifdef  READ
		fclose(stdin) ; fclose(stdout) ;
	#else
		getchar() ; getchar() ;
	#endif
	return 0 ;
}