社区
数据结构与算法
帖子详情
探讨一道有趣的题目
adfas
2009-05-18 03:07:47
原题链接http://acm.pku.edu.cn/JudgeOnline/problem?id=3734
说有n个砖块,有4种颜色(红,蓝,绿,黄),现在用这四种颜色给这n块砖涂上颜色。并且要求红色和绿色砖块的数目均为偶数。
问一共有多少种方法。
貌似能推导出o(1)组合数学办法,可是我想不出来。
...全文
155
12
打赏
收藏
探讨一道有趣的题目
原题链接http://acm.pku.edu.cn/JudgeOnline/problem?id=3734 说有n个砖块,有4种颜色(红,蓝,绿,黄),现在用这四种颜色给这n块砖涂上颜色。并且要求红色和绿色砖块的数目均为偶数。 问一共有多少种方法。 貌似能推导出o(1)组合数学办法,可是我想不出来。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tian428
2009-05-19
打赏
举报
回复
所以,直接套4^(n-1)+2^(n-1)的公式计算 o(1)
...
纯数学问题
tian428
2009-05-19
打赏
举报
回复
假设n个砖块红绿都为偶数的方法数为f(n), 红绿都为奇数的方法数为g(n);
n个砖块,可以看做原来有n-1个砖头,再加一个砖头.原来那n-1个砖头的染色方法有如下可能:
1.已经是红绿都为偶数,那剩下的那块砖头必定是黄或蓝,这种情况下有2*f(n-1)种方法;
2.红绿都为奇数,此时无论剩下的那块砖头染何种颜色都无法满足红绿都为偶数的条件;
3.此外(即红绿一奇一偶),剩下的那块砖头必定要染前n-1红绿中为奇的那种颜色,这种情况下有4^(n-1)-f(n-1)-g(n-1)种方法 (即总方法数减去全奇和全偶的方法数)
所以 f(n)=2*f(n-1)+4^(n-1)-f(n-1)-g(n-1)=4^(n-1)+f(n-1)-g(n-1)
同理可推g(n)=2*g(n-1)+4^(n-1)-f(n-1)-g(n-1)=4^(n-1)+f(n-1)-g(n-1)
所以 f(n)=4^(n-1)+f(n-1)-g(n-1)
=4^(n-1)+(4^(n-2)+f(n-2)-g(n-2))-(4^(n-2)+f(n-2)-g(n-2))
=4^(n-1)+2*(f(n-2)-g(n-2))
=...
=4^(n-1)+2^(n-2)*(f(1)-g(1)) 掰掰手指就可以知道f(1)=2,g(1)=0;
=4^(n-1)+2^(n-1)
题外话,同理可以推得g(n)=4^(n-1)-2^(n-1)
绿色夹克衫
2009-05-19
打赏
举报
回复
不好意思,看了一下原题,似乎排列顺序也需要考虑进去,那答案的数量就多多了。
给出的例子里面2块的答案是6,如果不考虑顺序的话,2块的答案应该是5。原题里面说的是n块砖排成1排,有多少种涂法!
根据原题来推的话,似乎是4^(n-1) + 2^(n-1),说实话,基本上是靠凑数弄出来的
求mod 10007 可以到log(n),不过mod的结果应当存在一个循环节,利用预运算计算出循环节的长度,是有可能达到O(1)的。
绿色夹克衫
2009-05-18
打赏
举报
回复
自己测了几个,好像是对的,改写成关于n的公式
n为奇数:(n+1)(n+3)(n+5)/24
n为偶数:(n+2)(n+3)(n+4)/24
推导的方法大概是,先将n分为2部分,其中一部分为偶数(P0),另一部分可以是奇数,也可以是偶数(P1)
共(n/2) + 1项
P0可以分为2部分,共(P0 / 2) + 1项(对应必须为偶数的两种颜色)
P1可以分为2部分,共(P1 + 1)项(对应可以为奇数的两种颜色)
可以推出f(n) = f(n - 2) + ((n / 2) + 1) ^ 2 n为偶数
可以推出f(n) = f(n - 2) + (n / 2) ^ 2 + (n / 2) n为奇数
然后利用平方和公式,应该能够推出最后的结果。
绿色夹克衫
2009-05-18
打赏
举报
回复
如果对了,我再详细说怎么推的!否则白浪费感情!
绿色夹克衫
2009-05-18
打赏
举报
回复
推了一个,LZ验证一下吧!
n为奇数(m = n + 1 / 2):m(m + 1)(m + 2)/3
n为偶数(m = n / 2):(m + 1)(m + 2)(2m + 3)/6
adfas
2009-05-18
打赏
举报
回复
[Quote=引用 5 楼 tian428 的回复:]
感觉推出一个公式,就是o(1)了,这样就成了纯数学问题。。。
另可不可以某种颜色用了0次?
[/Quote]
可以为0,0是偶数
tian428
2009-05-18
打赏
举报
回复
感觉推出一个公式,就是o(1)了,这样就成了纯数学问题。。。
另可不可以某种颜色用了0次?
adfas
2009-05-18
打赏
举报
回复
没关系啦,大牛帮想想,生成函数是很好列的,可是如何化简到o(1),就不晓得了。囧= =
绿色夹克衫
2009-05-18
打赏
举报
回复
不好意思,上面给的递推真是错误百出,没有仔细考虑,另外也不是O(1)的!
应该可以通过组合直接求出来!
[Quote=引用 1 楼 litaoye 的回复:]
递推?
f(n) = f(n - 1) * 2 + f(n - 2) * 2
[/Quote]
adfas
2009-05-18
打赏
举报
回复
N比较大10^9,最好想下看有无o(1)的计算公式,根据ac率和数据规模,应该是有的。可是偶想不到。
大牛帮忙想啊,这题还是有较强的探讨价值的
绿色夹克衫
2009-05-18
打赏
举报
回复
递推?
f(n) = f(n - 1) * 2 + f(n - 2) * 2
一道
C#编程题与答案
一道
简单的C#题,里面有两种解题的方法,希望初学的同学一起
探讨
一下。
2018年最全Java面试通关秘籍第四套
因此,看到这里,我希望每一位小伙伴不是把这篇文章简单的丢进收藏夹里边,为了你的升职加薪,请好好对待每
一道
题目
!每一题都可能成为你以后的绊脚石! 不要问我为什么没答案了,原因还是以前那句话,单纯的背面...
探讨
:用两个栈实现一个队列(我作为面试官的小结)
两年前从网上看到
一道
面试题:用两个栈(Stack)实现一个队列(Queue)。觉得不错,就经常拿来面试,几年下来,做此题的应该有几十人了。通过对面试者的表现和反应,有一些统计和感受,在此做个小结。用C++描述,...
leetcode全ac-Leetcode-Solution-Book:leetcode问题的解决方案书
笔者按照目录刷题,对于每
一道
题,力争使用效率最高(时间复杂度最低)的算法,并全部通过C++代码实现AC。(文中计算的复杂度都是最坏情况复杂度) 因为考虑到大部分读者已经在Leetcode浏览过
题目
了,所以每道题都按照...
关于提升和作用域的
一道
有趣
的
题目
前几天看到了
一道
慕课网上推荐的
有趣
的js
题目
,来自手记《99%的人都会答错的js面试题(你会吗?)》,作者是King。今天我专门研究了一下这道题,下面总结一下我目前对这道
题目
的理解。首先我对他的原题稍加改动引用...
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章