zoukankan      html  css  js  c++  java
  • [ZJOI2008] 生日聚会

    共有(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;
    }
    
  • 相关阅读:
    vue-loader
    slot内容分发
    单向数据流
    vue父子组件(1.0)
    vue组件
    vue过渡
    vue之自定义组件
    jquery下拉菜单
    vue之过滤器
    【数学】数学归纳法
  • 原文地址:https://www.cnblogs.com/mollnn/p/12299251.html
Copyright © 2011-2022 走看看