P2592 [ZJOI2008]生日聚会

Posted may-2nd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2592 [ZJOI2008]生日聚会相关的知识,希望对你有一定的参考价值。

容易发现已经结束掉的一个子串只要合法就对后面没有影响,所以可以令 (f_{i,j,p,q}) 表示前 (i+j) 个人有 (i) 个男孩,(j) 个女孩,所有后缀中男孩最多比女孩多 (p) 个,女孩最多比男孩多 (q) 个的方案数,转移即枚举下一个位置是男孩或者女孩。

时间复杂度 (O(nmk^2))~

code:

#include<bits/stdc++.h>
using namespace std;
#define N 25
#define NN 155
#define Mod 12345678
#define Max(x,y)((x)>(y)?x:y)
#define For(i,x,y)for(i=x;i<=(y);i++)
int f[NN][NN][N][N];
int main()
{
    int n,m,k,ans=0,i,j,p,q;
    cin>>n>>m>>k;
    f[0][0][0][0]=1;
    For(i,0,n)
    For(j,0,m)
    For(p,0,k)
    For(q,0,k)
    {
        if(p<k)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])%Mod;
        if(q<k)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])%Mod;
    }
    For(p,0,k)
    For(q,0,k)ans=(ans+f[n][m][p][q])%Mod;
    cout<<ans;
    return 0;
}

以上是关于P2592 [ZJOI2008]生日聚会的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1037: [ZJOI2008]生日聚会Party

[ZJOI2008]生日聚会Party

bzoj1037ZJOI2008生日聚会Party

[BZOJ 1037][ZJOI2008]生日聚会Party

bzoj 1037 [ZJOI2008]生日聚会Party dp

1037: [ZJOI2008]生日聚会Party