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

[ZJOI2008] 生日聚会 - dp

时间:2020-02-12 16:43:43      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:zjoi   i++   sign   女孩   mat   code   ons   i+1   solution   

共有\(n\)个男孩与\(m\)个女孩打算坐成一排。对于任意连续的一段,男孩与女孩的数目之差不超过 \(k\)。求方案数。

\(n,m \leq 150, k \leq 20\)

Solution

\(f[i][j][k][l]\) 表示放了 \(i,j\) 个男女,所有后缀中,男生减女生最大为 \(k\),女生减男生最大为 \(l\) 的方案数

采用“主动转移”

f[i+1][j][k+1][max(l-1,0)]+=f[i][j][k][l]

f[i][j+1][max(k-1,0)][l+1]+=f[i][j][k][l]

#include <bits/stdc++.h>
using namespace std;

int f[155][155][22][22],n,m,lim;
const int mod = 12345678;

signed main() {
    cin>>n>>m>>lim;
    f[0][0][0][0]=1;
    for(int i=0;i<=n;i++) {
        for(int j=0;j<=m;j++) {
            for(int k=0;k<=lim;k++) {
                for(int l=0;l<=lim;l++) {
                    (f[i+1][j][k+1][max(l-1,0)]+=f[i][j][k][l])%=mod;
                    (f[i][j+1][max(k-1,0)][l+1]+=f[i][j][k][l])%=mod;
                }
            }
        }
    }
    int ans=0;
    for(int i=0;i<=lim;i++) {
        for(int j=0;j<=lim;j++) {
            (ans+=f[n][m][i][j])%=mod;
        }
    }
    cout<<ans;
}

[ZJOI2008] 生日聚会 - dp

标签:zjoi   i++   sign   女孩   mat   code   ons   i+1   solution   

原文地址:https://www.cnblogs.com/mollnn/p/12299251.html

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