组合数学练习题(二)——Chemist
题意:
在一个 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的更多相关文章
- Linux基础练习题(二)
Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...
- python/MySQL练习题(二)
python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...
- 第三十三章 linux常规练习题(二)
一.练习题一 1.删除用户基本组shanghai03.发现无法正常删除,怎样才能将其删除掉,不能删除用户.2.打开多个xshell窗口连接登录同一虚拟机,使用不同的用户登录多次,分别使用w和who命令 ...
- 组合数学练习题(一)——Chemist
题意: 从 n 个人中选出不超过 k 个人,再在选出的人中选出一些人成为队员,再在队员中选一名队长,求不同的方案数.答案 mod 8388608. 共有T组询问,每次给你n和k.T ≤ 10^4 k ...
- PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。
Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...
- python六十四课——高阶函数练习题(二)
总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...
- PHP练习题二
1.抓取远程图片到本地,你会用什么函数? fsockopen, A 2.用最少的代码写一个求3值最大值的函数. function($a,$b,$c){* W0 z* u6 k+ e. L a: }5 ...
- PHP练习题(二)
程序6.题目: 假设某人有100,000现金,每经过一次路口需要进行一次交费交费规则为当他现金大于50,000时每次需要交%5,如果现金小于等于50,000时每次交5,000.问此人可以经过多少次这个 ...
- Python3.7 练习题(二) 使用Python进行文本词频统计
# 使用Python进行词频统计 mytext = """Background Industrial Light & Magic (ILM) was starte ...
随机推荐
- HDU——2119 Matrix
Matrix Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- foobar2000播放dff格式音乐的解决办法
安装dff插件:http://www.foobar2000.org/components/view/foo_input_dsdiff 离线版本:链接:http://pan.baidu.com/s/1e ...
- 总结一下CSS定位
在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之 CSS position属性值 absolute ...
- 在VC6.0中多线程编程演示样例(带同步信号量)
直接上代码: #include <windows.h>//必要的头文件,使用Windows API函数 #include <stdio.h> int index = 0; in ...
- Eclipse 变量点击高亮显示以及自己定义高亮显示颜色
1.方法一:alt+shift+o 打开/关闭,该功能 2.方法二:windows-> preferences->java->Editor->Mark Occurences ( ...
- noteexpress使用指南
软件功能:在写论文时直接调用参考数据并输出正规的格式. (以下简称NE) A.下载安装 下载地址:Note-express - Bibliography Software 选择相应的学校进行下载,相 ...
- atom及其插件activate-power-mode下载安装
Atom是Github推出的一个文本编辑器,其中包含很多插件可以自行下载安装,其中一个最近比较火的就是插件activate-power-mode,可以实现打字屏振效果, 打字带特效哦,所以最近就尝试安 ...
- beego07----web博客
conf/app.conf appname = blog1 httpport = 8080 runmode = dev name=admin pwd=admin controllersmy/attac ...
- Lightoj 1019 - Brush (V)
算出从点1到点n的最短路径. /* *********************************************** Author :guanjun Created Time :2016 ...
- Android 6.0 RK3288 ROM编译详解+命令详解【转】
本文转载自:http://blog.csdn.net/MLQ8087/article/details/58607692 Android 6.0 RK3288 ROM编译详解+命令详解 原创 2017年 ...