HDU 4532
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> #define LL __int64
using namespace std;
const LL MOD=1000000007ll; LL C[500][500];
LL Nn[500];
LL dp[50][500]; //表示前i个系,存在j个空位,它左右两个同学是来自同一个系的种数。此时是把同一个系的同学看作是无区别的
//等计算完毕后再乘上阶乘即可。
int stu[50];
/*此题确实是妙,开始时就往容斥想,但很复杂,没能做出来。
题解是利用了是否存在相邻两个同学来自同一个系这个特点来设状态。
*/ void Init(){
Nn[1]=1;
for(int i=2;i<=500;i++)
Nn[i]=(Nn[i-1]*(LL)i)%MOD;
memset(C,0,sizeof(C));
C[0][0]=1ll;
for(int i=1;i<=500;i++){
for(int j=0;j<=i;j++){
if(j==0) C[i][j]=1ll;
else if(j==i) C[i][j]=1ll;
else{
C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
}
}
}
} void slove(int n){
dp[1][stu[1]-1]=1;
int sum=stu[1];
for(int i=2;i<=n;i++){
for(int j=0;j<sum;j++){//前i个系最多有sum个空位(左右来自同一个系的),于是枚举这些空位
for(int k=1;k<=stu[i];k++){//加入第i个系的同学,把这i个同学分块。
for(int h=0;h<=j&&h<=k;h++){//表示前h个块的同学加入到这j个空位中
dp[i][j-h+stu[i]-k]+=(((dp[i-1][j]*C[j][h])%MOD*C[stu[i]-1][k-1])%MOD*C[sum+1-j][k-h])%MOD;
//C[j][h]表示从j个空位中选出h个让其加入
// C[stu[i]-1][k-1]表示如何分块
//C[sum+1-j][k-h]表示将剩余的块加入非j个空位,即左右来自不同系的
//dp[i][j-h+stu[i]-k]当h个空位加入了同学,导致左右同系的空位减少。但明显的,分块的块内同样引入了
//左右同系的空位
dp[i][j-h+stu[i]-k]%=MOD;
}
}
}
sum+=stu[i];
}
LL ans=dp[n][0];
for(int i=1;i<=n;i++){
ans=(ans*Nn[stu[i]])%MOD;
}
printf("%I64d\n",ans);
} int main(){
Init();
int T;
scanf("%d",&T);
int n,t=0;
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&stu[i]);
memset(dp,0,sizeof(dp));
printf("Case %d: ",++t);
slove(n);
}
return 0;
}
HDU 4532的更多相关文章
- HDU 4532 湫秋系列故事——安排座位 (组合+DP)
湫秋系列故事——安排座位 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- [SinGuLaRiTy] 组合数学题目复习
[SinGuLaRiTy] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 2011] 计算系数 题目描述 给定一个多项式( ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
随机推荐
- python配置文件编写
from configparser import ConfigParser # 配置类,专门来读取配置文件# 配置文件结尾:.ini .conf .config .properties .xml# 配 ...
- [转]在 Linux 下使用 RAID
转自:http://www.linuxidc.com/Linux/2015-08/122191.htm RAID 的意思是廉价磁盘冗余阵列(Redundant Array of Inexpensive ...
- [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)
本文转自:http://msdn.microsoft.com/zh-cn/library/windows/apps/jj150597.aspx 本主题将展示在使用 StreamSocket 功能时,如 ...
- IIS Express 错误提示汇总
在做WEB Service开发中,要经常用到IIS Express服务器,有些自己遇到的问题做一个汇总以待后续查找. 错误类型: 问题来源:直接在项目上选择调试运行. 解决方案: 1.直接找到那个文件 ...
- Android基础TOP3:Activity的线性,相对,帧和表格布局的概括
线性布局 LinearLayout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- 背包系列 hdu 3535 分组背包
题意: 有n组工作,现在有T分钟时间去做一些工作.每组工作里有m个工作,并且类型为s,s类型可以为0,1,2,分别表示至少选择该组工作的一项,至多选择该工作的一项,不限制选择.每个工作有ci,gi两个 ...
- JS——回调函数
1.回调函数作为参数的形式进行使用 2.回调函数一定程度上达到了解耦效果(模块化.功能化) <script> console.log(op(1, 2, add)); console.log ...
- ddrmenu
<%@ Register TagPrefix="dnn" TagName="MENU" Src="~/DesktopModules/DDRMen ...
- IOS7升级攻略
1) Select the main view, set the background color to black (or whatever color you want the status ba ...
- common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.
问题在复现工程https://github.com/google/hdrnet时出现. 现象: 解决: TensorFlow版本问题,升级到版本1.10.0之后,问题解决.