题意:有来自n个专业的学生,每个专业分别有ai个同学,现在要将这些学生排成一行,使得相邻的两个学生来自不同的专业,问有多少种不同的安排方案。

分析:首先将所有专业的学生视作一样的,最后再乘以各自学生的数量的阶乘。排列的时候通过动态规划来处理,设状态为前i个系,一共有j个位置相邻位置来自同系,然后转移。具体见代码注释。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long LL;
const LL mod = (int)(1e9)+;
LL A[];
LL C[][];
LL dp[][]; // dp[i][j]表示处理到第i组,一共还有j个位置左右坐的同学来自同一个专业
int n;
int seq[]; void pre() {
A[] = A[] = ;
for (int i = ; i < ; ++i) {
A[i] = A[i-] * i % mod;
}
for (int i = ; i < ; ++i) {
C[][i] = ;
for (int j = ; j <= i; ++j) {
C[j][i] = (C[j][i-] + C[j-][i-]) % mod;
}
}
} int solve() {
memset(dp, , sizeof (dp));
dp[][seq[]-] = ; // 给相邻同学来自一个系的间隙叫做粘着点
LL sum = seq[];
for (int i = ; i <= n; ++i) {
for (int j = ; j < sum; ++j) { // sum表示处理到前i-1组最多有sum个粘着点
for (int k = ; k <= seq[i]; ++k) { // 枚举第i组同学被拆分成k个块放入到队伍中
for (int h = ; h <= j && h <= k; ++h) {
// 枚举有h个块放到了前面的j个粘着点,即破坏了粘着点,但显然块内带来了新的粘着点
dp[i][j-h+seq[i]-k] += dp[i-][j]*C[h][j]%mod*C[k-h][sum+-j]%mod*C[k-][seq[i]-]%mod;
// C[h][j]表示h个快插入了哪些粘着点
// C[k-h][sum-1-j]表示k-h个块插入了那些非粘着点,总间隙是sum+1个
// C[k][seq[i]-1]表示这seq[i]个同学是如何划分成k个块的
dp[i][j-h+seq[i]-k] %= mod;
}
}
}
sum += seq[i];
}
LL ret = dp[n][];
for (int i = ; i <= n; ++i) {
ret = ret * A[seq[i]] % mod;
}
return ret;
} int main() {
int T, ca = ;
pre();
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = ; i <= n; ++i) {
scanf("%d", &seq[i]);
}
printf("Case %d: %d\n", ++ca, solve());
}
return ;
}

HDU-4532 湫秋系列故事——安排座位 组合数学DP的更多相关文章

  1. HDU 4532 湫秋系列故事——安排座位 (组合+DP)

    湫秋系列故事——安排座位 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  2. [HDU4532]湫秋系列故事——安排座位

    题面在这里 description 有\(n\)种颜色的小球,每种颜色的小球有\(a_i\)个: 要把它们摆成一排,求相邻小球颜色不相同的摆放方案数. 任意两个合理的安排方法,只要有一个位置的同学不同 ...

  3. hdu ---(4517)小小明系列故事——游戏的烦恼(Dp)

    小小明系列故事——游戏的烦恼 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  4. hdu 4502吉哥系列故事——临时工计划 (简单DP)

    Problem Description 俗话说一分钱难倒英雄汉,高中几年下来,吉哥已经深深明白了这个道理,因此,新年开始存储一年的个人资金已经成了习惯,不过自从大学之后他不好意思再向大人要压岁钱了,只 ...

  5. HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包)

    HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包) 题意分析 裸完全背包 代码总览 #include <iostream> #include <cstdio& ...

  6. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...

  7. HDU 4539 郑厂长系列故事——排兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) ...

  8. HDU 4539 郑厂长系列故事——排兵布阵 状压dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/O ...

  9. HDU 4539 郑厂长系列故事——排兵布阵 —— 状压DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Ot ...

随机推荐

  1. SHARE NOTHING SHARE EVERYTHING

    http://mp.weixin.qq.com/s?__biz=MjM5ODYwMjI2MA==&mid=2649736156&idx=1&sn=23931f48282f6ef ...

  2. 盒模型中--border

    三要素:宽border-width,形状border-style,颜色border-color <style> div{ width:300px; height:300px; backgr ...

  3. centos7 systemctl命令

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 实例: 启动nfs服务:systemctl start nfs-server.s ...

  4. Java 并发性和多线程

    一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...

  5. tr用法

    参考: http://man.linuxde.net/tr shell脚本学习指南 语法 tr [options] source-char-list replace-char-list 用途 转换字符 ...

  6. python Shapely 使用指南

    翻译:http://toblerity.org/shapely/manual.html 引入包 from shapely.geometry import Point from shapely.geom ...

  7. 远程无法连接Mysql 的解决方案

    问题描述: 新安装了MySQL 5.6,使用root用户无法远程连接, 提示Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL ...

  8. 解决SVN不显示状态图标

    打开注册表,找到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlay ...

  9. JQuery MultiSelect(左右选择框)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 1.Cookie的定义和分类,及优缺点

    定义:用户请求网页,连接服务器,服务器在用户机上寻找属于它的cookie文件,如果有,就读取它的信息,如果没有就创建一个cookie文件发送给用户,存储在本地,用户可以通过浏览器选项设置是否接收服务器 ...