[BZOJ1996]HNOI2010合唱队|DP
2015-05-04 20:58
267 查看
f[i][j][0]表示从i开始的j个数以左端为初始队列的最后的方案数,f[i][j][1]表示从i开始的j个数以右端为初始队列的最后的方案数,然后根据新加进来的数与区间两端的数的大小关系YY一下转移就行了。。
#include<cstdio> #include<iostream> #include<memory.h> #define N 1005 #define p 19650827 using namespace std; int n,i,j,a ,f [2]; int main() { scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); if (n==1) {printf("1");return 0;} for (i=1;i<=n-1;i++) f[i][2][0]=f[i][2][1]=(a[i+1]>a[i]); for (j=3;j<=n;j++) for (i=1;i<=n-j+2;i++) { if (i<n-j+2)f[i][j][1]=((a[i]<a[i+j-1])*f[i][j-1][0]+(a[i+j-2]<a[i+j-1])*f[i][j-1][1])%p; if (i>1) f[i-1][j][0]=((a[i-1]<a[i])*f[i][j-1][0]+(a[i+j-2]>a[i-1])*f[i][j-1][1])%p; // printf("%d %d %d %d\n",i-1,j,f[i-1][j][0],f[i-1][j][1]); } printf("%d\n",(f[1] [1]+f[1] [0])%p); }
相关文章推荐
- 【BZOJ1996】【HNOI2010】合唱队 [区间DP]
- [BZOJ1996][Hnoi2010]chorus 合唱队 区间dp
- 【BZOJ1996】[Hnoi2010]chorus 合唱队【区间DP】
- 【bzoj1996】[Hnoi2010]chorus 合唱队 区间dp
- BZOJ 1996: [Hnoi2010]chorus 合唱队(dp)
- bzoj 1996: [Hnoi2010]chorus 合唱队 dp
- [BZOJ]1996: [Hnoi2010]chorus 合唱队 区间DP
- BZOJ1996 [Hnoi2010]chorus 合唱队
- bzoj1996【HNOI2010】chorus 合唱队
- BZOJ 1996 HNOI 2010 chorus 合唱队 区间DP
- BZOJ1996: [Hnoi2010]chorus 合唱队
- bzoj 1996: [Hnoi2010]chorus 合唱队
- bzoj1996: [Hnoi2010]chorus 合唱队
- BZOJ1996 [Hnoi2010] 合唱队
- bzoj 1996 [Hnoi2010]chorus 合唱队
- BZOJ 1996: [Hnoi2010]chorus 合唱队 区间dp
- [bzoj 1996] [Hnoi2010]chorus 合唱队
- 【BZOJ1996】【Hnoi2010】chorus 合唱队 动态规划
- 1996: [Hnoi2010]chorus 合唱队 DP
- 【BZOJ 1996】 [Hnoi2010]chorus 合唱队