bzoj 1037: [ZJOI2008]生日聚会Party

Posted lxy8584099

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 1037: [ZJOI2008]生日聚会Party相关的知识,希望对你有一定的参考价值。

DP真强 什么都能做

 

/**************************************************************
    Problem: 1037
    User: lxy8584099
    Language: C++
    Result: Accepted
    Time:200 ms
    Memory:59476 kb
****************************************************************/
 
/*
    f[i][j][x][y]
    i个男生 j个女生 所有后缀中 男-女最大为x 女减男最大为y 
    Dp还真是啥都能做 
    遇到数据小的尽量往DP上面去想 
*/
#include<cstdio>
using namespace std;
const int N=155;
const int MOD=12345678;
int n,m,k;
int f[N][N][25][25];
inline int max(int a,int b)
{
    return a>b?a:b;
}
void Solve()
{
    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 x=0;x<=k;x++)
    for(int y=0;y<=k;y++) if(f[i][j][x][y])
    {
        if(i+1<=n) (f[i+1][j][x+1][max(y-1,0)]+=f[i][j][x][y])%=MOD;
        if(j+1<=m) (f[i][j+1][max(x-1,0)][y+1]+=f[i][j][x][y])%=MOD;
        // x+1 y+1超过了k也不所谓 因为我们只统计不大于k的部分 
    }
    int ans=0;
    for(int x=0;x<=k;x++)
    for(int y=0;y<=k;y++) (ans+=f[n][m][x][y])%=MOD;
    printf("%d
",ans);
}
int main()
{
    Solve();
    return 0;
}

 

以上是关于bzoj 1037: [ZJOI2008]生日聚会Party的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1037: [ZJOI2008]生日聚会Party

bzoj 1037: [ZJOI2008]生日聚会Party

bzoj 1037 [ZJOI2008]生日聚会Party(DP)

Bzoj1037 [ZJOI2008]生日聚会Party

bzoj1037: [ZJOI2008]生日聚会Party

BZOJ1037 [ZJOI2008]生日聚会Party