码迷,mamicode.com
首页 > 其他好文 > 详细

P2592 [ZJOI2008]生日聚会

时间:2020-07-22 15:59:43      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:mod   i++   max   clu   zjoi   lan   its   转移   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]生日聚会

标签:mod   i++   max   clu   zjoi   lan   its   转移   zjoi2008   

原文地址:https://www.cnblogs.com/May-2nd/p/13359768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!