愚蠢的摄影师——一种自己的想法

题目

题目描述
“如果两个人相差一秒出生,其中一个是小孩,那么另一个也是小孩。由此可以推论,所有人均是小孩。”

数计系是一个由N个人组成的大家庭,分别为1, 2, 3, …, N岁。

有一次系主任想为全系拍张合照,需要所有学生站成一排。起先他想按他们的岁数从小到大安排,但后来又觉得这样不自然。于是他建议按如下方案站排:
1岁的在最左边。
每相邻两人不得相差超过2岁。

这样学生的岁数看起来显得很平均(25岁和27岁的人差别很难看出)。
存在多种方案满足此要求。摄影师不想违反系主任的意愿, 就为每种可能的安排分别拍了一张照片。

输入
整数N,1<=N<=55。

输出
所拍照片张数。

样例输入
4
样例输出
4
时间限制: 1 Sec 内存限制: 128 MB

分析

直接用搜索必然会超时。
那么,就要减少状态。

既然N=55过于大,那么有没有什么办法是可以减少讨论状态的呢?,甚至是减半的呢?

想想,能够使讨论规模减半,但是问题规模不变的方向是什么。

奇数和偶数。
如果我们可以只讨论奇数,那么问题规模就减半!
先拿一个例子n=9
我们把奇数全部抽出来
1,3,5,7,9
那么符合题目要求的奇数序列有
19753,比如1,2,4,6,8,9,7,5,3
13975,例子有1,2,3,4,6,8,9,7,5
13597,例子有1,2.3.4.5.6.8.9.7
13579,例子有1,2,3,4,5,6,7,8,9
其他的奇数序列,无法插入偶数来构成满足题目要求的序列

我们可以观察得到,对于差值4及以上的相邻奇数,必须插入偶数来保持性质。我称其为——跳跃。

可以发现,上面四个序列只有一个跳跃。如果我们把跳跃画出来就会更明显
这里写图片描述

————–下面我们来讨论N为奇数的情况——————————-
首先为了满足题目性质,我们规定
1.每个奇数都是连接的
2.偶数最多只能相交一次
3.相邻奇数如果差为2,就平行放置,否则就是跳跃
4.数字1始终在最前面。

我们再来看奇数序列的性质

1.对于平行放置的部分,要么是升序,要么是降序,且一开始是升序。
证明很简单,对于数字A,与它平行相连的只可能有两个数字,A-2,A+2.
假设前一个是A-2,那么A后边必然是A+2.
然后A+2也适用这个顺序,
因为数字1固定在最前,所以一开始必然是升序。
2.跳跃必然在上升
如果有下降就违反规定2.
3.平行部分有且最多一次升序,最多只有一次降序。
  首先是最多有一次升序:

这里写图片描述

如果有两个升序(1-3,7-9),跳跃(3-7)之间的奇数(自然数3和7之间有5)会多出来,强行在后面连接会直接违反规定2.
同样,如果有两个降序就会直接违反规定2

这里写图片描述

4.最多只会有一次跳跃。跳跃的一方总是最大的奇数。
如果不是跳到最大奇数,那么就会造成两个升序,或者两个降序,由3得这是不可行的

所以,最终的序列必然是这种样子
这里写图片描述

J 从3到N-4都是符合要求的。
至于J=N2J=1的情况我们到时候再来讨论一下。
而对于任意一个J,我们要讨论,所有 J 的偶数的插入方法。而至于 J 的偶数,我们从图像看到,必然是已经插入到跳跃了

对于一个偶数
只会有三个位置可以插入
这里写图片描述
我将其命名为前中后
其中前和后都依赖别的偶数来插入。但是因为J-1是可以插入到J后面的(因为J+1就在J后面),所以,对于”后“,总是可以利用后一个偶数来保证满足性质。
我将其“视为“只受前面偶数的影响。

对于前面偶数,B-2,的前中后情况,对B的影响有
这里写图片描述
于是可以设置三个函数 Q,Z,H 分别表示在B选择前,中,后的情况下的不同序列的个数
容易得到递推关系
B=2k

Qk=Zk1Zk=Qk1+Zk1+Hk1Hk=Qk1+Zk1

Sk=Qk+Zk+Hk

Sk 表示从2到B偶数插入的不同方法的数量
其中对于 k=1(B=2)Q1=0,Z1=1,H1=1

于是,对于 J 来说,偶数的不同插入方法就是SJ12
上面有提,J可以从3到N-4.

对于N-2(也相当于N,即没有跳跃)

少了一个 SN32 ,因为J=N-2的情况和J=N的情况是一样的。于是可以得到

k=1N12SkSN32

除此之外,多了一种情况
这里写图片描述
最后的数字2可以放回奇数区域之间,同理,数字2,4可以放回奇数区域,由此推理后面的偶数直到N-5都可以放回奇数区域。N-3放回去就重复了,所以不放回去
我们注意到,放回去的最大一位偶数是不可以放置在后的位置的
对于这种情况,满足条件的序列数量是
[k=1N52(SkHk)]+1

这里额外的1是所有偶数不放回的情况

————————————————

对于J=1,就只有一种情况

这里写图片描述
所以

对于一个确定的N

我们得到的结果为

AN=k=1N12SkSN32+1+[k=1N52(SkHk)]+1N

对于N为偶数来说,模仿上面的做法是可行的。
只是要注意修改S函数为S’函数。边际条件 S1 其实对应的是3.
Q1=1,Z1=1,H1=1 .
还有,额外多出了一种情况
这里写图片描述

只要在最后的结果加上1就好

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值