1. 程式人生 > >合唱隊

合唱隊

image com for pan cnblogs .com string main 判斷

技術分享

這道題就是普通的dp表示i到j的範圍內最後是從左加入還是從右加入,然後判斷條件是否符合就可以了。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 const int mod=19650827,NN=1007;
 9 
10 int n,i,j;
11 int a[NN],f[NN][NN][2]={0};
12 
13 int
main() 14 { 15 scanf("%d",&n); 16 for (int i=1;i<=n;i++) 17 scanf("%d",&a[i]); 18 for (int i=1;i<=n;i++) 19 f[i][i][0]=1; 20 for(int i=n;i>=1;i--) 21 for(int j=i+1;j<=n;j++) 22 { 23 if(a[j]>a[i]) f[i][j][1]+=f[i][j-1
][0]; 24 if(a[j]>a[j-1]) f[i][j][1]+=f[i][j-1][1]; 25 if(a[i]<a[i+1]) f[i][j][0]+=f[i+1][j][0]; 26 if(a[i]<a[j]) f[i][j][0]+=f[i+1][j][1]; 27 f[i][j][0]%=mod; 28 f[i][j][1]%=mod; 29 } 30 int ans=(f[1][n][0]+f[1][n][1])%mod; 31
printf("%d",ans); 32 }

合唱隊