zoukankan      html  css  js  c++  java
  • [ZJOI2008]生日聚会

    dp,f[i][j][k][l]表示前i个人,j个男生,后缀中男生比女生最多多k人,最少少l人的方案数。

    /**
     * Problem:Party
     * Author:Shun Yao
     * Time:2013.5.30
     * Result:Accepted
     * Memo:DP
     */
    
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    
    long min(long x, long y) {
    	return x < y ? x : y;
    }
    long max(long x, long y) {
    	return x > y ? x : y;
    }
    
    const long MOD = 12345678;
    
    long n, m, lim, N, f[20043891], ans;
    
    int main() {
    	freopen("party.in", "r", stdin);
    	freopen("party.out", "w", stdout);
    	scanf("%ld%ld%ld", &n, &m, &lim);
    	N = n + m;
    	memset(f, 0, sizeof f);
    #define F(a, b, c, d) f[(((a) * (n + 1) +(b)) * (lim + 1) + (c)) * (lim + 1) + (d)]
    	long i, j, k, l, J, K, L;
    	F(0, 0, 0, 0) = 1;
    	for (i = 0; i < N; ++i) {
    		for (J = min(i, n), j = 0; j <= J; ++j)
    			for (K = min(j, lim), k = 0; k <= K; ++k)
    				for (L = min(i - j, lim), l = 0; l <= L; ++l) {
    					if (k < lim && j < n) {
    						long &a = F(i + 1, j + 1, k + 1, max(l - 1, 0));
    						a = (a + F(i, j, k, l)) % MOD;
    					}
    					if (l < lim && i - j < m) {
    						long &b = F(i + 1, j, max(k - 1, 0), l + 1);
    						b = (b + F(i, j, k, l)) % MOD;
    					}
    				}
    	}
    	ans = 0;
    	for (k = 0; k <= lim; ++k)
    		for (l = 0; l <= lim; ++l)
    			ans = (ans + F(N, n, k, l)) % MOD;
    	printf("%ld", ans);
    	fclose(stdin);fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    for memory long term update
    Tomcat 部署 Jenkins (Linux系统)
    Linux新增硬盘
    jenkins常见问题
    Linux安装JDk
    Jenkins入门(一)
    主播必备工具Bongo Cat!
    Docker常用命令
    Docker二进制部署
    golang中for语句详解
  • 原文地址:https://www.cnblogs.com/hsuppr/p/3115421.html
Copyright © 2011-2022 走看看