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

    题目描述

    今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party。 hidadz带着朋友们来到花园中,打算坐成一排玩游戏。为了游戏不至于无聊,就座的方案应满足如下条件:

    对于任意连续的一段,男孩与女孩的数目之差不超过k。

    很快,小朋友便找到了一种方案坐了下来开始游戏。hidadz的好朋友Susie发现,这样的就座方案其实是很多的,所以大家很快就找到了一种,那么到底有多少种呢?热爱数学的hidadz和她的朋友们开始思考这个问题……

    假设参加party的人中共有n个男孩与m个女孩,你是否能解答Susie和hidadz的疑问呢?由于这个数目可能很多,他们只想知道这个数目除以12345678的余数。

    输入输出格式

    输入格式:

    输入文件party.in仅包含一行共3个整数,分别为男孩数目n, 女孩数目m, 常数k。

    输出格式:

    输出文件party.out应包含一行,为题中要求的答案。

    输入输出样例

    输入样例#1: 复制
    1 2 1
    输出样例#1: 复制
    1

    说明

    对于30%的数据,n , m ≤ 20;

    对于100%的数据, n , m ≤ 150,k ≤ 20。

    令$f[i][j][k1][k2]$表示i个男生,j个女生,男生最多比女生多k1个,女生最多比男生多k2个

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 int n,m,k,f[151][151][21][21],Mod=12345678,ans;
     8 int main()
     9 {int i,j,k1,k2;
    10   cin>>n>>m>>k;
    11   f[0][0][0][0]=1;
    12   for (i=0;i<=n;i++)
    13     {
    14       for (j=0;j<=m;j++)
    15     {
    16       for (k1=0;k1<=k;k1++)
    17         {
    18           for (k2=0;k2<=k;k2++)
    19         if (f[i][j][k1][k2])
    20         {
    21           if (k1!=k&&i<n)
    22             (f[i+1][j][k1+1][max(k2-1,0)]+=f[i][j][k1][k2])%=Mod;
    23           if (k2!=k&&j<m)
    24             (f[i][j+1][max(k1-1,0)][k2+1]+=f[i][j][k1][k2])%=Mod;
    25         }
    26         }
    27     }
    28     }
    29   for (i=0;i<=k;i++)
    30     {
    31       for (j=0;j<=k;j++)
    32     (ans+=f[n][m][i][j])%=Mod;
    33     }
    34   cout<<ans;
    35 }
  • 相关阅读:
    Git(一):基础调用
    Vue(一):使用Vue创建项目并发布
    mysql用户与权限
    跨域理解及常用解决方案
    Ajax简单用法
    冒泡排序算法
    委托使用方式
    How to: Add the Analyze Action to List Views 如何:将分析按钮添加到列表视图
    How to:Customize Action Controls 如何:自定义按钮控件
    How to: Customize the New Action's Items List 如何:自定义新按钮的项目列表
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8480769.html
Copyright © 2011-2022 走看看