[HNOI2010] 合唱队 chorus
2017-12-05 13:15
169 查看
标签:区间DP。
题解:
首先分析题目,根据题目中的列队方式以及数据范围,我们容易想到O(n2)的算法,也就是区间DP。发现直接dp[L][R],不能转移,于是添加一个dp[L][R][0/1],0表示这个区间最后从左边插入,1则表示右边。
然后分析从左边插入,上一个数要么是从左的要么是从右的,因为这个数在左,所以都要比他们大才符合条件。故(H[L]<H[L+1]||H[L]<H[R]),符合条件才能转移:dp[L][R][0]=dp[L+1][R][0]*(H[L]<H[L+1])+dp[L+1][R][1]*(H[L]<H[R]);
从右边插入类似:(H[R]>H[L]||H[R]>H[R-1]),dp[L][R][1]=dp[L][R-1][0]*(H[R]>H[L])+dp[L][R-1][1]*(H[R]>H[R-1]);
然后答案自然就是dp[1]
[0]+dp[1]
[1]了。
题解:
首先分析题目,根据题目中的列队方式以及数据范围,我们容易想到O(n2)的算法,也就是区间DP。发现直接dp[L][R],不能转移,于是添加一个dp[L][R][0/1],0表示这个区间最后从左边插入,1则表示右边。
然后分析从左边插入,上一个数要么是从左的要么是从右的,因为这个数在左,所以都要比他们大才符合条件。故(H[L]<H[L+1]||H[L]<H[R]),符合条件才能转移:dp[L][R][0]=dp[L+1][R][0]*(H[L]<H[L+1])+dp[L+1][R][1]*(H[L]<H[R]);
从右边插入类似:(H[R]>H[L]||H[R]>H[R-1]),dp[L][R][1]=dp[L][R-1][0]*(H[R]>H[L])+dp[L][R-1][1]*(H[R]>H[R-1]);
然后答案自然就是dp[1]
[0]+dp[1]
[1]了。
#include<cstdio> #include<iostream> #include<algorithm> #define LL long long using namespace std; const int MAXN=1100,mod=19650827,INF=0x3f3f3f3f; int n; int H[MAXN],dp[MAXN][MAXN][2]; int gi(){ int res; scanf("%d",&res); return res;} int main() { freopen("chorus.in","r",stdin); freopen("chorus.out","w",stdout); n=gi(); for(int i=1;i<=n;i++) H[i]=gi(); for(int i=1;i<n;i++) { if(H[i]<H[i+1]) { dp[i][i+1][0]=1; dp[i][i+1][1]=1; } } for(int i=2;i<n;i++) { for(int j=1;j+i<=n;j++) { int L=j,R=j+i; dp[L][R][0]=(dp[L+1][R][0]*(H[L]<H[L+1])+dp[L+1][R][1]*(H[L]<H[R]))%mod; dp[L][R][1]=(dp[L][R-1][0]*(H[R]>H[L])+dp[L][R-1][1]*(H[R]>H[R-1]))%mod; } } printf("%d\n",(dp[1] [0]+dp[1] [1])%mod); return 0; }
相关文章推荐
- 1996: [Hnoi2010]chorus 合唱队
- bzoj 1996: [Hnoi2010]chorus 合唱队
- BZOJ1996: [Hnoi2010]chorus 合唱队
- [BZOJ1996][Hnoi2010]chorus 合唱队
- bzoj 1996: [Hnoi2010]chorus 合唱队 dp
- 1996: [Hnoi2010]chorus 合唱队 DP
- BZOJ 1996: [Hnoi2010]chorus 合唱队
- bzoj千题计划211:bzoj1996: [Hnoi2010]chorus 合唱队
- [luoguP3205] [HNOI2010]CHORUS 合唱队(区间DP)
- [HNOI2010]CHORUS 合唱队
- BZOJ1996: [Hnoi2010]chorus 合唱队|动态规划
- 【BZOJ1996】[Hnoi2010]chorus 合唱队 区间DP
- bzoj 1996: [Hnoi2010]chorus 合唱队
- [HNOI2010]CHORUS 合唱队
- bzoj1996: [Hnoi2010]chorus 合唱队
- bzoj1996 [Hnoi2010]chorus 合唱队
- [HNOI2010]CHORUS 合唱队(洛谷3205)
- [bzoj 1996] [Hnoi2010]chorus 合唱队
- 1996: [Hnoi2010]chorus 合唱队
- [HNOI2010]CHORUS 合唱队