把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P3205 [HNOI2010]合唱队

题面传送门
一道蛮好的区间\(dp\)
\(f_{i,j,0}\)表示最后一个人从左边进来的方案数,\(f_{i,j1}\)表示从右边进来的方案数,分类讨论一下就好了。
代码实现:

#include<cstdio>
#define mod 19650827 
using namespace std;
int n,m,k,a[1039],f[1039][1039][2],ans,tot,pus;
int main(){
	register int i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++) scanf("%d",&a[i]),f[i][i][1]=1;
	for(i=n;i>=1;i--){
		for(j=i+1;j<=n;j++){
			if(a[i]<a[i+1])f[i][j][0]+=f[i+1][j][0];
			if(a[i]<a[j])f[i][j][0]=(f[i+1][j][1]+f[i][j][0])%mod;
			if(a[j]>a[i])f[i][j][1]=f[i][j-1][0];
			if(a[j]>a[j-1])f[i][j][1]=(f[i][j-1][1]+f[i][j][1])%mod;
		}
	}
	printf("%d\n",(f[1][n][1]+f[1][n][0])%mod);
}
posted @ 2020-04-22 08:23  275307894a  阅读(41)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end