Link:

BZOJ 1037 传送门

Solution:

由于对任意一段都有要求,于是我们对于所有前缀考虑其后缀不超过$k $即可:

设$dp[i][j][x][y]$为前$i$个人中有$j$个男孩,且后缀中男女最大相差$x$,女男最大相差$y$时的方案数

每次向添加女孩/添加男孩转移。

注意:如果差值为负数时置为$0$,因为无论差了多少,在下一次添加相同性别时最大相差都会变为$1$

Code:

#include <bits/stdc++.h>

using namespace std;
const int MOD=;
const int MAXN=;
int dp[*MAXN][MAXN][][],n,m,k,res=; int main()
{
scanf("%d%d%d",&n,&m,&k);dp[][][][]=; //初始值
for(int i=;i<n+m;i++) for(int j=;j<=n;j++)
for(int x=;x<=k;x++) for(int y=;y<=k;y++)
if(dp[i][j][x][y])
{
if(j+<=n && x+<=k) (dp[i+][j+][x+][max(,y-)]+=dp[i][j][x][y])%=MOD;
if(y+<=k && i+-j<=m) (dp[i+][j][max(,x-)][y+]+=dp[i][j][x][y])%=MOD;
}
for(int i=;i<=n;i++) for(int j=;j<=k;j++) for(int x=;x<=k;x++)
(res+=dp[n+m][i][j][x])%=MOD;
printf("%d",res);
return ;
}

Review:

(1)如果转移为向后添加数时,一般用已知数向后转移未知数更方便,而非未知数反推已知数

(2)如果对“任意一段”有要求时,转移时保证每一个前缀的最差后缀都合法即可

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

  1. BZOJ 1037 生日聚会 DP

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

  2. BZOJ 1037 生日聚会

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

  3. BZOJ 1037 生日聚会(神DP)

    这题的DP很难想,定义dp[i][j][a][b]表示用了i个男生,j个女生,任一连续的后缀区间内,男生比女生最多多a人,女生比男生最多多b人. 转移就是显然了. # include <cstd ...

  4. bzoj [ZJOI2008]生日聚会Party

    思路:dp, 用dp[ i ][ j ][ u ][ v ] 表示, 有n个人,其中有j个是男生,后缀区间中男生人数减去女生人数的最大值为u, 女生人数减去男生人数 的最大值为v, 然后就能写出状态转 ...

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

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

  6. 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, ...

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

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

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

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

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

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

随机推荐

  1. 数据库——mysql内置功能(11)

    1.视图 视图是一个虚拟表(非真实存在),其本质是(根据SQL语句获取动态的数据集,并未其命名),用户使用时只需使用(名称)即可获取结果集,可以将该结果集当做表来使用 使用视图我们可以把查询过程中的临 ...

  2. Python全栈 MySQL 数据库 (表字段增、删、改、查、函数)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图         查询SQL变量 show variables 1.表字 ...

  3. django orderby

    https://www.douban.com/group/topic/44329052/

  4. mssql 格式化字符串 /时间 年月日时分秒

    比如:1 想格式化 000001,100 格式化为000100: 思路是这样的 1000000 +格式化的数字 取后6位: select   right(cast(power(10,6) as var ...

  5. vue cli & vue 3.x

    vue cli & vue 3.x https://cli.vuejs.org/dev-guide/ui-api.html#ui-api https://cli.vuejs.org/zh/gu ...

  6. BeanUtils Date

    在jdbc封装(基础的CRUD)的时候(查询一条数据,查询多条数据,更新....)经常会用到一个BeanUtil来设置属性值,当对象中存在Date类型的时候,会报错:如下: 2017-11-03 13 ...

  7. CORS跨域cookie传递

    服务端 Access-Control-Allow-Credentials:true Access-Control-Allow-Methods:* Access-Control-Allow-Origin ...

  8. 《R语言实战》读书笔记--第四章 基本数据管理

    本章内容: 操纵日期和缺失值 熟悉数据类型的转换 变量的创建和重编码 数据集的排序,合并与取子集 选入和丢弃变量 多说一句,数据预处理的时间是最长的……确实是这样的,额. 4.1一个示例 4.2创建新 ...

  9. es6+最佳入门实践(2)

    2.解构赋值 2.1.什么是解构赋值? 什么是解构赋值?这里的关键字还是赋值,这是说如何去赋值的问题,这里说的解构可以理解为解散重新构造,所以解构赋值可以理解为解散重新构造后进行赋值,通常是左边一种结 ...

  10. MFC 获得各类指针、句柄的方法(转)

    原文转自 https://blog.csdn.net/abcjennifer/article/details/7480019 1.MFC中获取常见类句柄<视图类,文档类,框架类,应用程序类> ...