bzoj1037生日聚会——DP

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1037

记录每个状态时前面所有连续子序列中男生与女生差距的最大值,根据那个转移即可。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,k,f[155][155][25][25],mod=12345678,ans;
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    f[0][0][0][0]=1;
    for(int i=0;i<=n;i++)//女孩
        for(int j=0;j<=m;j++)//男孩
            for(int l=0;l<=min(i,k);l++)//女孩比男孩多
                for(int p=0;p<=min(j,k);p++)//男孩比女孩多
                {
                    if(l<k&&i<n)
                        (f[i+1][j][l+1][max(0,p-1)]+=f[i][j][l][p])%=mod;
                    if(p<k&&j<m)
                        (f[i][j+1][max(0,l-1)][p+1]+=f[i][j][l][p])%=mod;
                }
    for(int l=0;l<=k;l++)
        for(int p=0;p<=k;p++)
            (ans+=f[n][m][l][p])%=mod;
    printf("%d",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/Zinn/p/9118017.html

时间: 2024-11-09 03:15:53

bzoj1037生日聚会——DP的相关文章

[ZJOI2008][BZOJ1037] 生日聚会Party|动态规划

1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1605  Solved: 947[Submit][Status][Discuss] Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.很快,小朋友便找

bzoj1037[ZJOI2008]生日聚会

bzoj1037[ZJOI2008]生日聚会 题意: 一排小孩坐着玩游戏.就座的方案满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.给出男孩数,女孩数和k,求就座方案数除以12345678的余数. 题解: dp方程见程序,i1i2表示当前选了几男几女,i3i4分别表示当前男比女多几个和女比男多几个. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define

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, a, b) dp(i, j+1, max(0, a-1), b+1) += dp(i, j, a, b) 时间复杂度O(NMK^2) -----------------------------------------------------------------------------------

bzoj1037【ZJOI2008】生日聚会Party

1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1828  Solved: 1081 [Submit][Status][Discuss] Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.很快,小朋

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

1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1650  Solved: 971[Submit][Status][Discuss] Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.很快,小朋友便找

BZOJ 1037 生日聚会Party(DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1037 题意:给定n个0m个1.有多少种排列方式使得任意一段中01的个数差小于等于K? 思路:f[i][j][k][t]表示i个0.j个1.0比1最多多k个.1比0最多多t的方案数. int n,m,K,f[N][N][21][21]; void up(int &x,int y) { x+=y; if(x>=mod) x-=mod; } int main() { RD(n,m,K);

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

http://www.lydsy.com/JudgeOnline/problem.php?id=1037 一个区间是否满足 任意连续的一段,男孩与女孩的数目之差不超过k, 取决于男孩与女孩数目之差的最大值是否满足条件 而且若在一个位置 上坐一个男孩, 所有包含这个位置的区间 男孩与女孩数目之差+1,与女孩与男孩数目之差-1 所以我们只需要知道 最大的数目 之差即可 dp[i][j][k][l] 表示前i个位置,坐了j个男孩,男孩与女孩数目之差=k,女孩与男孩数目之差=l 的方案数 k<0 怎么办

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

1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2560  Solved: 1538[Submit][Status][Discuss] Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.很快,小朋友便

[ZJOI2008]生日聚会Party

1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2907  Solved: 1727[Submit][Status][Discuss] Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.很快,小朋友便