1996: [Hnoi2010]chorus 合唱队 DP
2014-07-26 16:37
363 查看
区间dp,dp[ i ] [ j ] [ 0 ] 表示区间i到j最后一个到左边的方案数,最后的0变为1表示最后一个在右边的方案数。
初始化dp[ i ][ i ][ 0 ]都为1。
初始化dp[ i ][ i ][ 0 ]都为1。
#include <algorithm> #include <cstring> #include <cstdio> #include <iostream> using namespace std; #define mod 19650827 #define maxn 1100 int save[maxn],n; int dp[maxn][maxn][2]; int main() { memset(dp,0,sizeof(dp)); scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&save[i]); dp[i][i][0]=1; } for(int i=n-1;i>=1;i--) { for(int j=i+1;j<=n;j++) { if(save[i]<save[i+1]) dp[i][j][0]+=dp[i+1][j][0]; if(save[i]<save[j]) dp[i][j][0]+=dp[i+1][j][1]; if(save[j]>save[i]) dp[i][j][1]+=dp[i][j-1][0]; if(save[j]>save[j-1]) dp[i][j][1]+=dp[i][j-1][1]; dp[i][j][0]%=mod; dp[i][j][1]%=mod; } } int ans=(dp[1] [0]+dp[1] [1])%mod; printf("%d\n",ans); return 0; }
相关文章推荐
- [BZOJ]1996: [Hnoi2010]chorus 合唱队 区间DP
- [BZOJ1996][Hnoi2010]chorus 合唱队 区间dp
- bzoj 1996: [Hnoi2010]chorus 合唱队 dp
- 【bzoj1996】[Hnoi2010]chorus 合唱队 区间dp
- BZOJ 1996: [Hnoi2010]chorus 合唱队(dp)
- 【BZOJ1996】[Hnoi2010]chorus 合唱队【区间DP】
- 1996: [Hnoi2010]chorus 合唱队
- 【BZOJ1996】[Hnoi2010]chorus 合唱队 区间DP
- 1996: [Hnoi2010]chorus 合唱队
- BZOJ1996: [Hnoi2010]chorus 合唱队|动态规划
- bzoj1996 [Hnoi2010]chorus 合唱队 区间dp
- 1996: [Hnoi2010]chorus 合唱队
- 1996: [Hnoi2010]chorus 合唱队 - BZOJ
- BZOJ 1996 HNOI 2010 chorus 合唱队 区间DP
- 【BZOJ1996】【Hnoi2010】chorus 合唱队 动态规划
- bzoj1996: [Hnoi2010]chorus 合唱队
- bzoj 1996: [Hnoi2010]chorus 合唱队
- bzoj 1996 [Hnoi2010]chorus 合唱队
- bzoj 1996: [Hnoi2010]chorus 合唱队
- [luoguP3205] [HNOI2010]CHORUS 合唱队(区间DP)