P2476 [SCOI2008]着色方案
数学太珂怕了……膜一下->这里
记\(sum[i]\)为题中\(c[i]\)的前缀和,\(C[i][j]\)表示\(C_{i}^j\)
设\(f[i][j]\)表示前面\(i\)中颜色已经涂完且涂了\(sum[i]\)块,其中有\(j\)对相同的色块的方案数
考虑第\(i+1\)种颜色
把\(c[i+1]\)个分成\(a\)组,总共有\(C_{c[i+1]-1}^{a-1}\)中方案(相当于\(c[i+1]-1\)个空格中取出\(a-1\)个)
将\(b\)组插入到同色的之间,\(a-b\)组插入到不同色的之间,那么可以转移到\(f[i+1][j-b+c[i+1]-a]\)
方案数为$$f[i][j]C_{c[i+1]-1}{a-1}*C_jbC_{sum[i]+1-j}^{a-b}$$
其中\(C_j^b\)表示在\(j\)个空之间插入\(b\)个的方案数
\(C_{sum[i]+1-j}^{a-b}\)表示共\(sum[i]+1\)个位置,\(j\)个不能放,剩下的位置放\(a-b\)个的方案数
dp即可,答案为\(f[n][0]\)
//minamoto
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n,c[25],sum[25],C[105][105],f[25][105];
void init(){
for(int i=0;i<=75;++i)C[i][0]=1;
for(int i=1;i<=75;++i)for(int j=1;j<=i;++j)
C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
int main(){
init(),scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&c[i]),sum[i]=sum[i-1]+c[i];
f[1][c[1]-1]=1;
for(int i=1;i<n;++i)for(int j=0;j<sum[i];++j){
if(!f[i][j])continue;
for(int a=1;a<=c[i+1];++a)for(int b=0;b<=a&&b<=j;++b){
int res=1ll*f[i][j]*C[c[i+1]-1][a-1]%mod*C[j][b]%mod;
res=1ll*res*C[sum[i]+1-j][a-b]%mod;
(f[i+1][j+c[i+1]-a-b]+=res)%=mod;
}
}
printf("%d\n",f[n][0]);return 0;
}
P2476 [SCOI2008]着色方案的更多相关文章
- LUOGU P2476 [SCOI2008]着色方案
传送门 解题思路 毒瘤题,,刚开始写了个奇奇怪怪的哈希,结果T了5个点..后来深(kan)入(le)思(ti)考(jie),发现c的范围很小,设$f[a][b][c][d][e][pre]$表示还能 ...
- BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- bzoj1079: [SCOI2008]着色方案
ci<=5直接想到的就是5维dp了...dp方程YY起来很好玩...写成记忆化搜索比较容易 #include<cstdio> #include<cstring> #inc ...
- bzoj 1079: [SCOI2008]着色方案 DP
1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 803 Solved: 512[Submit][Status ...
- [SCOI2008]着色方案
1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2228 Solved: 1353[Submit][Stat ...
- [SCOI2008] 着色方案[高维dp]
321. [SCOI2008] 着色方案 ★★★ 输入文件:color.in 输出文件:color.out 简单对比时间限制:1 s 内存限制:64 MB 题目背景: 有n个木块排成一 ...
- 【BZOJ 1079】[SCOI2008]着色方案
Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木 ...
- BZOJ 1079: [SCOI2008]着色方案(巧妙的dp)
BZOJ 1079: [SCOI2008]着色方案(巧妙的dp) 题意:有\(n\)个木块排成一行,从左到右依次编号为\(1\)~\(n\).你有\(k\)种颜色的油漆,其中第\(i\)种颜色的油漆足 ...
- 【状态表示】Bzoj1096 [SCOI2008] 着色方案
Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木 ...
随机推荐
- C语言不容易识别的坑
1.重复两次定义 #include<stdio.h> #include<stdlib.h> #include<string.h> int a,b; void fun ...
- 【PowerDesigner】PowerDesigner之CDM、PDM、SQL之间转换
有关CDM.PDM.SQL之间转换以及不同数据库之间库表Sql的移植,首先要了解的是它们各自的用途.这里就简单的描述一下,不做详细的解释了. CDM:概念数据模型.CDM就是以其自身方式来描述E-R图 ...
- webview的设置
设置支持js: webView.getSettings().setJavaScriptEnabled(true); 设置无图模式: webView.getSettings().setBlockNetw ...
- poj——3687 Labeling Balls
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14835 Accepted: 4346 D ...
- guava cache学习
Guava Cache与ConcurrentMap很相似,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除.相对地,Guava Cache为了限制内存占 ...
- 子元素设置margin-top,父元素也受影响
这个问题困惑了非常久.尽管没有大碍早就摸出来怎么搞定它.但始终不明确原因出在哪里,假设仅仅是IE有问题我也不会太在意.可问题是全部上等浏览器都表现如此,这样叫我怎能安心?今天总算下狠心查出来怎么回事, ...
- openstack页面自己定义插件使用具体解释(django、ajax、post)(zTree为例)
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 如有转载.请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...
- javaweb_page指令
jsp指令: 1.作用:jsp指令是为jsp引擎设计的.他们并不直接产生不论什么课件输出.而是告诉引擎怎样处理jsp页面中的其余部分 2.jsp指令包含:page指令.include指令,taglib ...
- ios学习8_KVC和字典转模型
Key Value Coding是cocoa的一个标准组成部分,它能让我们能够通过name(key)的方式訪问属性,某些情况下极大地简化了代码.可称之为cocoa的大招. 例如以下的样例: 使用KVC ...
- Lvs 负载均衡 (VS/NAT模式)
一.LVS简介 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirt ...