【BZOJ1037】【codevs1410】生日聚会,DP
2016-09-24 15:28
295 查看
传送门1
传送门2
思路:
挺简单的DP
刚开始有点脑残,从后向前转移怎么写都写不对
改成从前向后就A了……
f[i][j][p][q]表示前面有i个男孩,j个女孩,男女孩从当前DP的位置为起点,最大连续子段和分别为p,q
那么就是
f[i][j][p][q]−>{f[i+1][j][p+1][max(q−1,0)]f[i][j+1][max(p−1,0)][q+1]
初始f[0][0][0][0]=1
最终答案∑ki=0∑kj=0f[n][m][i][j]
算是捡回一点DP的自信
代码:
传送门2
思路:
挺简单的DP
刚开始有点脑残,从后向前转移怎么写都写不对
改成从前向后就A了……
f[i][j][p][q]表示前面有i个男孩,j个女孩,男女孩从当前DP的位置为起点,最大连续子段和分别为p,q
那么就是
f[i][j][p][q]−>{f[i+1][j][p+1][max(q−1,0)]f[i][j+1][max(p−1,0)][q+1]
初始f[0][0][0][0]=1
最终答案∑ki=0∑kj=0f[n][m][i][j]
算是捡回一点DP的自信
代码:
#include<cstdio> #include<iostream> #define mo 12345678 using namespace std; int n,m,k,ans; int f[152][152][22][22]; main() { scanf("%d%d%d",&n,&m,&k); f[0][0][0][0]=1; for (int i=0;i<=n;++i) for (int j=0;j<=m;++j) for (int p=0;p<=min(k,i);++p) for (int q=0;q<=min(k,j);++q) f[i+1][j][p+1][max(q-1,0)]=(f[i+1][j][p+1][max(q-1,0)]+f[i][j][p][q])%mo, f[i][j+1][max(p-1,0)][q+1]=(f[i][j+1][max(p-1,0)][q+1]+f[i][j][p][q])%mo; for (int i=0;i<=k;++i) for (int j=0;j<=k;++j) ans=(ans+f [m][i][j])%mo; printf("%d\n",ans); }
相关文章推荐
- BZOJ 1037: [ZJOI2008]生日聚会Party DP
- [bzoj1037][DP]生日聚会party
- bzoj 1037: [ZJOI2008]生日聚会Party (DP)
- bzoj 1037: [ZJOI2008]生日聚会Party dp
- bzoj 1037: [ZJOI2008]生日聚会Party (dp)
- 【bzoj1037】【ZJOI2008】【生日聚会Party】【dp】
- BZOJ 1037: [ZJOI2008]生日聚会Party( dp )
- bzoj1037[ZJOI2008]生日聚会Party DP
- [BZOJ1037][ZJOI2008]生日聚会Party dp
- BZOJ 1037 生日聚会Party(DP)
- bzoj1037 [ZJOI2008]生日聚会Party(dp)
- bzoj1037:[ZJOI2008]生日聚会Party[DP]
- 【bzoj 1037】生日聚会Party(DP)
- bzoj1037: [ZJOI2008]生日聚会Party DP
- BZOJ 1037: [ZJOI2008]生日聚会Party [序列DP]
- [BZOJ1037]ZJOI2008生日聚会|DP
- 【BZOJ1037】[ZJOI2008]生日聚会Party【计数DP】【特殊的姿势】
- HYSBZ/BZOJ 1037 [ZJOI2008] 生日聚会Party - dp
- BZOJ 1037: [ZJOI2008]生日聚会Party(区间dp)
- bzoj1037: [ZJOI2008]生日聚会Party(dp)