zoukankan      html  css  js  c++  java
  • bzoj1037生日聚会

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

    任意区间的话,可以从所有后缀区间考虑。

      因为每一个区间一定是某一时刻的一个后缀区间,所以只要每一时刻的后缀区间均合法,就行了。

    当然有状态是几个男孩、几个女孩,还可以记录状态:最大的男孩减女孩的差 和 最大的女孩减男孩的差,这样就能转移了。

    没错,只要关注后缀区间就行了!所以是max(0,u-1)而不是维持u不变!(当它是负数的时候就不用管了,因为已经且仅体现在另一维中)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define ll long long
    using namespace std;
    const int N=155,K=25;
    const ll mod=12345678;
    int n,m,k;
    ll dp[N][N][K][K],ans;
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        dp[0][0][0][0]=1;
        for(int i=0;i<=n;i++)
            for(int j=0;j<=m;j++)
                for(int u=0;u<=k;u++)
                    for(int v=0;v<=k;v++)
                    {
                        (dp[i+1][j][u+1][max(0,v-1)]+=dp[i][j][u][v])%=mod;
                        (dp[i][j+1][max(0,u-1)][v+1]+=dp[i][j][u][v])%=mod;
                    }
        for(int u=0;u<=k;u++)for(int v=0;v<=k;v++)(ans+=dp[n][m][u][v])%=mod;
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    2016.7.15
    2016.7.15
    2016.7.8
    2016.7.8
    2016.7.6
    2016.7.1--测评官网系列--手机行业
    2016.6.28--测评官网系列--牛奶行业
    2016.6.27
    Java中的Timer和TimerTask在Android中的用法
    Android 计时器Timer用法
  • 原文地址:https://www.cnblogs.com/Narh/p/9133446.html
Copyright © 2011-2022 走看看