题意:

在一个 n 维无限空间中,一开始原点处有一个细胞。细胞每秒都会增殖,每个原有细胞都会消亡,在与它曼哈顿距离恰为 1的所有位置都会新增一个细胞。求 T 秒后,原点处会有多少细胞,答案 mod1000000007。

共有Q组询问,每组询问给你n和T。Q ≤ 20000,n ≤ 100,T ≤ 200。

分析:

对于每次扩散,都会扩散到原细胞周围距离为1的一圈,由于最初每一个细胞都会从原点出发,我们可以考虑成原点的细胞的分身经过长途跋涉,每次可以朝着一个维度前进,也可以朝着一个维度后退,只要T秒后他可以回到原点,那么他对答案的贡献就加一。这样问题就等价于求有多少回到原点的长度为T的路径(从原点出发再回到原点看做一条路径)。

由于维度什么的实在是太抽象了,因此我们可以把每一维分开考虑,设 f[i][j] 表示用了i个维度,长度为2j的回到原点路径条数。设第i+1维走了2k步,那么在这2k步种,需要有k步向前走,k步向后走才能回到原点,方案数为C(k,2k)。此时走了2(j+k)步,对于这2(j+k)步,先走哪一步后走哪一步本质上是无所谓的,但是算作不同的方案,因此答案还要乘上C(2k,2(j+k)),这样就可以得到递推方程:

f[i+1][j+k]=f[i][j]C(k,2k)C(2k,2(j+k))

由于n,T都不大,所以可以预处理出f[i][j],O(1)回答每次询问。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int Q,n,t;
ll f[110][210],c[210][210];
void prework()
{
for(int i=0;i<=200;i++)
c[i][0]=1;
for(int i=1;i<=200;i++)
for(int j=1;j<=200;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
f[0][0]=1;
for(int i=0;i<=100;i++)
for(int j=0;2*j<=200;j++)
for(int k=0;2*(j+k)<=200;k++)
{
f[i+1][j+k]=(f[i+1][j+k]+(c[2*k][k]*c[2*(j+k)][2*k])%mod*f[i][j]%mod)%mod;
}
}
int main()
{
prework();
cin>>Q;
for(int i=1;i<=Q;i++){
cin>>n>>t;
if(t&1==1)cout<<'0'<<endl;
else cout<<f[n][t/2]<<endl;
}
return 0;
}

组合数学练习题(二)——Chemist的更多相关文章

  1. Linux基础练习题(二)

    Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...

  2. python/MySQL练习题(二)

    python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...

  3. 第三十三章 linux常规练习题(二)

    一.练习题一 1.删除用户基本组shanghai03.发现无法正常删除,怎样才能将其删除掉,不能删除用户.2.打开多个xshell窗口连接登录同一虚拟机,使用不同的用户登录多次,分别使用w和who命令 ...

  4. 组合数学练习题(一)——Chemist

    题意: 从 n 个人中选出不超过 k 个人,再在选出的人中选出一些人成为队员,再在队员中选一名队长,求不同的方案数.答案 mod 8388608. 共有T组询问,每次给你n和k.T ≤ 10^4 k ...

  5. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  6. python六十四课——高阶函数练习题(二)

    总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...

  7. PHP练习题二

    1.抓取远程图片到本地,你会用什么函数? fsockopen, A 2.用最少的代码写一个求3值最大值的函数. function($a,$b,$c){* W0 z* u6 k+ e. L  a: }5 ...

  8. PHP练习题(二)

    程序6.题目: 假设某人有100,000现金,每经过一次路口需要进行一次交费交费规则为当他现金大于50,000时每次需要交%5,如果现金小于等于50,000时每次交5,000.问此人可以经过多少次这个 ...

  9. Python3.7 练习题(二) 使用Python进行文本词频统计

    # 使用Python进行词频统计 mytext = """Background Industrial Light & Magic (ILM) was starte ...

随机推荐

  1. Python的描述符

    1.描述符的定义 描述符是与特定属性互相绑定的一种协议,通过方法被触发修改属性,这些方法包括__get__(),__set__(),__delete__().将这些方法定义在类中,即可实现描述符 2. ...

  2. Free命令详解和释放linux Cache(转载)

    因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache.这些cache起来的内容可以增加文件以及的读写速度. 先说下free命令怎么看内存 [root@yuyii proc]# fr ...

  3. centos 安装python2.7

    安装pip sudo yum -y install epel-release sudo yum -y install python-pip 下载解压Python-2.7.3 #wget http:// ...

  4. org.hibernate.AnnotationException: No identifier specified for entity:

    使用hibernate的e-r映射pojo类的时候遇到org.hibernate.AnnotationException: No identifier specified for entity的异常, ...

  5. Android sdcard读写权限问题之中的一个

    博主在刚刚在学习过程中发现了一个关于android往sdcard读写的问题, 配置了该配置的提示无读写权限. 在AndroidManifest.xml文件里配置清单例如以下 <manifest ...

  6. Dropbox电面面经

    他家电面有2轮,等待onsite.. . 电面1: 国人MM面的.这点感觉非常难得. 统计近期5分钟的点击量,实现hit和getHit两个函数.这题是他家高频题,我用deque实现的,hit的均摊时间 ...

  7. #include<> 和 #include""的区别

    #include< file >编译程序会先到标准函数库中找文件 #include”file” 编译程序会先从当前目录中找文件 参考原文 转: 在C程序中包含文件有以下两种方法: (1)用 ...

  8. java克隆对象clone()的使用方法和作用

    转自:997.html">http://www.okrs.cn/blog/news/?997.html 内容摘要 若需改动一个对象,同一时候不想改变调用者的对象.就要制作该对象的一个本 ...

  9. GCC 编译详解 (转)

    GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.Gcc不仅功能强大,而且可以编译如C.C++.Object C.Jav ...

  10. sysinfo 系统调用

    在分析luci时,看到 usr/lib/luci/sys.lua 里调用 nixio.sysinfo().这是一个c调用lua的用例.在nixio的代码process.c里导出了给lua调用的接口.在 ...