* 本专题锻炼递推的思维,问题由子问题构造 *
HDU—Children’s queue(递归解法)
题意:
男生女生排队,女生不可以单独一个人存在,例如 男男女 不合法, 女女男则可以,求合法序列个数
思路:
养成递推的习惯, 定义f[ n ] 表示排n个人的合法序列个数, 我们希望求得f[ n ]时,那么一定是由他的子状态构成,而子状态肯定也是合法状态,那样我们就不必关心它内部具体是什么,而把子状态看成整体就好了。那么我们分为几种情况
1 、第n个是男生, 那么只要前n-1 是合法序列即可
2、第n个是女生, 那么只要n-1个是女生才满足条件,那现在看成是两个女生和哪些序列能形成合法序列
1)第f[ n-2 ]个是合法序列, 那么加上两个女生也是合法序列
2)第 n-2 不是合法序列 f[n - 4 ]+ 男 + 女 + 两女 , 能把不合法变成合法
综上所述, 递推公式就是 f[ n ] = f[ n-1 ]+ f[ n-2 ] + f[ n-4 ]
HDU - Queuing
题意:
fm序列, 不允许有fmf , fff存在, 求合法序列个数
思路:
跟上一题一个道理,分析f[ n ] , 假设最后是m,那么只要 n-1 是合法序列即可。 否则,也就是f 的情况,只有这几种情况 fmf mff fff mmf , 其中 fmf、fff是不合法的我们不考虑, 那么剩下 mff 、mmf 。
mmf 的情况,只要是 n-3是合法序列那就可以
mff 的情况 还需保证 第n-3位是m , 也就是 mmff
综上所述, 递推公式就是 f[ n ] = f[ n-1 ]+ f[ n-3 ] + f[ n-4 ]