生日聚会

【问题描述】

今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party。 hidadz带着朋友们来到花园中,打算坐成一排玩游戏。为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k。很快,小朋友便找到了一种方案坐了下来开始游戏。hidadz的好朋友Susie发现,这样的就座方案其实是很多的,所以大家很快就找到了一种,那么到底有多少种呢?热爱数学的hidadz和她的朋友们开始思考这个问题…… 假设参加party的人中共有n个男孩与m个女孩,你是否能解答Susie和hidadz的疑问呢?由于这个数目可能很多,他们只想知道这个数目除以12345678的余数。

【输入格式】

仅包含一行共3个整数,分别为男孩数目n,女孩数目m,常数k。

【输出格式】

应包含一行,为题中要求的答案。

【样例输入】

1 2 1

【样例输出】

1

【数据范围】

n , m ≤ 150,k ≤ 20。


题解:

设f[i][j][k][l]为选了i个男生,j个女生,男生与女生最大的差值为k,女生与男生最大的差值为l的方案数

转移方程:(取男生或取女生坐)

 

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
int f[][][][];
int x, y, z;
inline int Max(int x, int y)
{
return (x < y) ? y : x;
}
inline void Cal(int &x, int y)
{
x = (x + y) % ;
}
int main()
{
scanf("%d%d%d", &x, &y, &z);
f[][][][] = ;
for(int i = ; i <= x; ++i)
for(int j = ; j <= y; ++j)
for(int k = ; k <= z; ++k)
for(int l = ; l <= z; ++l)
{
if(i + <= x && k + <= z) Cal(f[i + ][j][k + ][Max(l - , )], f[i][j][k][l]);
if(j + <= y && l + <= z) Cal(f[i][j + ][Max(k - , )][l + ], f[i][j][k][l]);
}
int ans = ;
for(int k = ; k <= z; ++k)
for(int l = ; l <= z; ++l)
Cal(ans, f[x][y][k][l]);
printf("%d", ans);
}

生日聚会 BZOJ 1037的更多相关文章

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

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1583  Solved: 936[Submit][ ...

  2. BZOJ 1037: [ZJOI2008]生日聚会Party( dp )

    dp(i, j, a, b)表示选了i个男生, j个女生, 后缀中男生比女生多a(最多), 女生比男生多b(最多). dp(i+1, j, a+1, max(0, b-1)) += dp(i, j, ...

  3. BZOJ 1037: [ZJOI2008]生日聚会Party [序列DP]

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2249  Solved: 1337[Submit] ...

  4. BZOJ 1037: [ZJOI2008]生日聚会Party 四维DP

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1650  Solved: 971[Submit][ ...

  5. 【BZOJ】【1037】【ZJOI2008】生日聚会party

    DP orz iwtwiioi 这种题居然是DP……原来统计方案数是可以用动态规划来做的啊= =用一些变量来维护一些信息,保证方案可行性/合法性 人太弱实在是有些忧伤…… /************* ...

  6. [BZOJ 1037] 生日聚会Party

    Link: BZOJ 1037 传送门 Solution: 由于对任意一段都有要求,于是我们对于所有前缀考虑其后缀不超过$k $即可: 设$dp[i][j][x][y]$为前$i$个人中有$j$个男孩 ...

  7. BZOJ 1037 生日聚会 DP

    [ZJOI2008]生日聚会Party Time Limit: 10 Sec Memory Limit: 162 MB Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她 ...

  8. bzoj千题计划125:bzoj1037: [ZJOI2008]生日聚会Party

    http://www.lydsy.com/JudgeOnline/problem.php?id=1037 一个区间是否满足 任意连续的一段,男孩与女孩的数目之差不超过k, 取决于男孩与女孩数目之差的最 ...

  9. BZOJ1037 [ZJOI2008]生日聚会Party 【DP】

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2800  Solved: 1654 [Submi ...

随机推荐

  1. 当互联网遇上家装,十大家装O2O混战

    2015年已过去大半,装修O2O就出现了新的局面:为数众多的家居网络平台在家装O2O领域还未站稳脚跟,新的入局者就打出超低价格登场.新老O2O家装大战迅速展开,除了拼价格还拼品牌和体验,家装O2O的好 ...

  2. 将回车键转换为Tab键

    实现效果: 知识运用: KeyEventArgs类的KeyValue属性 public int KeyValue {get;} //获取KeyDown或KeyUp事件的键盘值 SendKeys类的Se ...

  3. CPP-网络/通信:WebService

    工具:vc2003 //引入相关头文件,连接动态库,定义全局变量. //***************************************************** #include & ...

  4. insert size|single-read|Paired-end|Mate-pair

    (测序方面):测三只大熊猫:得到的insert size有150bp,500bp,2kb,5kb和10kb这四种,可测得序列长度和平均reads长度. 为什么average reads这么短? 因为i ...

  5. C语言数据类型_02

    C语言数据类型:

  6. LeetCode 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11 ...

  7. systemverilog(3)之Randomize

    what to randomize? (1) primary input data <==one data (2)encapsulated input data <== muti grou ...

  8. FSHC之MCU接口部分理解

    |_____________|       |_____|                                                                    |__ ...

  9. day12-图

  10. uboot-README_uboot分析

    http://wenku.baidu.com/link?url=w0sgGDHlEmfRC0FDRdcLvx0ecmvZ7NsvQ2UtfoHnciux6OCpNAmCDjS1zTUQMIZZ8A0M ...