【BZOJ 2822】2822: [AHOI2012]树屋阶梯(卡特兰数+高精度)

时间:2023-01-29 02:59:36

2822: [AHOI2012]树屋阶梯

Description

暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题。由于地上露营湿气重,必须选择在高处的树屋露营。小龙分配的树屋建立在一颗高度为N+1尺(N为正整数)的大树上,正当他发愁怎么爬上去的时候,发现旁边堆满了一些空心四方钢材(如图1.1),经过观察和测量,这些钢材截面的宽和高大小不一,但都是1尺的整数倍,教官命令队员们每人选取N个空心钢材来搭建一个总高度为N尺的阶梯来进入树屋,该阶梯每一步台阶的高度为1尺,宽度也为1尺。如果这些钢材有各种尺寸,且每种尺寸数量充足,那么小龙可以有多少种搭建方法?(注:为了避免夜里踏空,钢材空心的一面绝对不可以向上。)
【BZOJ 2822】2822: [AHOI2012]树屋阶梯(卡特兰数+高精度)

以树屋高度为4尺、阶梯高度N=3尺为例,小龙一共有如图1.2所示的5种

搭 建方法:

【BZOJ 2822】2822: [AHOI2012]树屋阶梯(卡特兰数+高精度)

Input

一个正整数 N(1≤N≤500),表示阶梯的高度

Output

一个正整数,表示搭建方法的个数。(注:搭建方法个数可能很大。)

Sample Input

3

Sample Output

5

HINT

1  ≤N≤500

Source

【分析】

  这个卡特兰数的模型很经典吧,我之前的总结里面也应该有的。

  看图显然卡特兰数。高精度。用分解质因数的方法,就是高精乘低精而已。

  然后简单说说为什么是卡特兰数?

  【BZOJ 2822】2822: [AHOI2012]树屋阶梯(卡特兰数+高精度)

  看下面那个很丑的图,编号的那些格子是角落的,很明显是两两不能处于同一块木板的。

  就是说这7个格子正好处在7块不同的木板上。(你刚好要用7块木板)

  然后?的一定在某一块模板上。比如跟4一个木板,第二个图,就变成两个3阶梯的子问题。

  如果跟6一个板,就变成一个5阶梯和一个1阶梯的子问题。
  就是f[n]=f[0]*f[n-1]+f[1]*f[n-2]+...f[n-1]*f[0]

  这个是卡特兰数的一种定义。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 510
#define Maxm 2010 int num[Maxn*]; void add(int x,int c)
{
for(int i=;i*i<=x;i++) if(x%i==)
{
while(x%i==) num[i]+=c,x/=i;
}
if(x!=) num[x]+=c;
} int ans[Maxm],ll; void mul(int x)
{
for(int i=;i<=ll;i++) ans[i]*=x;
for(int i=;i<=ll;i++)
{
ans[i+]+=ans[i]/;
ans[i]%=;
}
while(ans[ll+]!=)
{
ans[ll+]+=ans[ll+]/;
ans[ll+]%=;
ll++;
}
} int main()
{
int n;
scanf("%d",&n);
memset(num,,sizeof(num));
for(int i=n+;i<=*n;i++) add(i,);
for(int i=;i<=n+;i++) add(i,-);
memset(ans,,sizeof(ans));
ans[]=;ll=;
for(int i=;i<=*n;i++) if(num[i])
{
while(num[i]>) mul(i),num[i]--;
}
for(int i=ll;i>=;i--) printf("%d",ans[i]);printf("\n");
return ;
}

2017-03-23 16:11:36

【BZOJ 2822】2822: [AHOI2012]树屋阶梯(卡特兰数+高精度)的更多相关文章

  1. 【BZOJ 2822】&lbrack;AHOI2012&rsqb;树屋阶梯 卡特兰数&plus;高精

    这道题随便弄几个数就发现是卡特兰数然而为什么是呢? 我们发现我们在增加一列时,如果这一个东西(那一列)他就一格,那么就是上一次的方案数,并没有任何改变,他占满了也是,然后他要是占两格呢,就是把原来的切 ...

  2. BZOJ2822&lbrack;AHOI2012&rsqb;树屋阶梯——卡特兰数&plus;高精度

    题目描述 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为N+1尺(N为 ...

  3. BZOJ2822&colon;&lbrack;AHOI2012&rsqb;树屋阶梯&lpar;卡特兰数&comma;高精度&rpar;

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...

  4. bzoj3907 网格 &amp&semi; bzoj2822 &lbrack;AHOI2012&rsqb;树屋阶梯——卡特兰数&plus;高精度

    题目:bzoj3907:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 bzoj2822:https://www.lydsy.com/Jud ...

  5. BZOJ 2822&colon; &lbrack;AHOI2012&rsqb;树屋阶梯 &lbrack;Catalan数 高精度&rsqb;

    2822: [AHOI2012]树屋阶梯 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 779  Solved: 453[Submit][Status] ...

  6. bzoj2822&lbrack;AHOI2012&rsqb;树屋阶梯&lpar;卡特兰数&rpar;

    2822: [AHOI2012]树屋阶梯 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 879  Solved: 513[Submit][Status] ...

  7. bzoj 2822 &lbrack;AHOI2012&rsqb;树屋阶梯 卡特兰数

    因为规定n层的阶梯只能用n块木板 那么就需要考虑,多出来的一块木板往哪里放 考虑往直角处放置新的木板 不管怎样,只有多的木板一直扩展到斜边表面,才会是合法的新状态,发现,这样之后,整个n层阶梯就被分成 ...

  8. &lbrack;bzoj2822&rsqb;&lbrack;AHOI2012&rsqb;树屋阶梯 &lpar;卡特兰数&plus;分解质因数&plus;高精度&rpar;

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...

  9. P2532 &lbrack;AHOI2012&rsqb;树屋阶梯 卡特兰数

    这个题是一个卡特兰数的裸题,为什么呢?因为可以通过划分来导出递推式从而判断是卡特兰数,然后直接上公式就行了.卡特兰数的公式见链接. https://www.luogu.org/problemnew/s ...

  10. Luogu P2532 &lbrack;AHOI2012&rsqb;树屋阶梯 卡特兰数

    接着压位OvO... 我不会告诉你答案就是卡特兰数... 为什么呢? 首先,$ans[0]=1,ans[1]=1,ans[2]=2$ 对于$ans[3]$,我们可以发现他是这样来的: $ans[3]= ...

随机推荐

  1. WebSite和WebApplication的区别

    1. WebApplication(Web应用程序)和WebSite(网站)的区别:WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的,用起来简单,例如:不需要创建命名控件.C#代码修改以 ...

  2. epoll的ET和LT两种模式对比及注意事项

    ET模式: 因为ET模式只有从unavailable到available才会触发,所以 1.读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小: 如果应用层读 ...

  3. Zabbix实战-简易教程(6)--Server端高可用

    3.4 server前端高可用    至此,单台Zabbix server环境已经搭建完成,为了达到高可用效果,我们需要通过2台服务器之间通过HA软件进行探测,一旦检测到主的server挂掉后,从的s ...

  4. Tensorflow 之finetune微调模型方法&amp&semi;&amp&semi;不同层上设置不同的学习率

    在不同层上设置不同的学习率,fine-tuning https://github.com/dgurkaynak/tensorflow-cnn-finetune ConvNets: AlexNet VG ...

  5. Apache Commons configuration使用入门

    使用Commons  Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...

  6. CentOS 部署 Python3 的一些注意事项

    环境:centos6.7https://github.com/vinta/awesome-pythonhttps://github.com/PyMySQL/PyMySQLhttps://github. ...

  7. JavaScript中的闭包与匿名函数

    知识内容: 1.预备知识 - 函数表达式 2.匿名函数 3.闭包 一.函数表达式 1.定义函数的两种方式 函数声明: 1 function func(arg0, arg1, arg2){ 2 // 函 ...

  8. linux命令之fuser

    Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME... [ - ] [ -n SPACE ] [ -SIGN ...

  9. Mybatis之批量更新操作

    更新单条记录 UPDATE course SET name = 'course1' WHERE id = 'id1'; 更新多条记录的同一个字段为同一个值 UPDATE course SET name ...

  10. java学习笔记——正则表达式

    NO 方法名称 类型 描述 1 public boolean matches(String regex) 普通 正则验证使用 2 public String replaceAll(String reg ...