t1:不讲
t2:不讲
t3:求最长的长度显然,分解质因数即可,那求方案呢?
n个数
例:
2 3 5 7
可组{
2 3 5 7 2 3 7 5 2 5 3 7 2 5 7 3 2 7 3 5 2 7 5 3
...
...
...
}
答案=24例:
2 3 3 5
可组{
2 3 3 5 2 3 5 3 2 5 3 3 5 2 3 3 5 3 2 3 5 3 3 2
3 2 3 5 3 2 5 3 3 3 2 5 3 3 5 2 3 5 2 3 3 5 3 2
}
答案=12
那么重复了一个,答案就少了一半
再例:
2 2 3 3
可组{
2 2 3 3 2 3 2 3 2 3 3 2 3 2 2 3 3 2 3 2 3 3 2 2
}
·答案又少了一半,但这是为什么呢?
·通过上面的找规律,可以得出如下的一个公式
·有重复元素的排列问题的方案数为:
·N!/m1!m2!m3!……mk!
·其中m1表示第一种元素的个数,m2表示第二种元素的个数,mk表示第k种元素的个数
·如何证明?
·假设如果没有重复元素的话,则排列的方案数为n!,但某一种元素的排列会重复,就好像上面的找规律,而这些重复元素组成的方案数就是它的个数的阶乘,我们只取其中一种,自然除以它的阶乘
·(想弄懂证明需对排列数有一定了解)
T4:
·这道题挺有意思,首先需明白,为什么根据前序和后序不能确定中序
·原因在于前序中的节点不能确定是左子树还是右子树
解题如下:
·先序遍历是根左右,后序遍历是左右根,那把后序遍历反过来便变成了根右左
·易证,这里不给出证明
·那么根据根左右和根右左,可以推知当前子树的根以及左子树的根和右子树的根
·如果当前坐子树的根与右子树的根相同的话,答案便可以乘2
·易证
·依次递归即可
·注意,如果当根相同时,需要另起一个递归,不能再像上述递归左子树再递归右子树,而是直接递归
·这里再介绍一种方法(首先需要明白上述方法):
·根据上述方法,我们知道,当一颗子树的根以及左根和右根不确定时,答案会变动
·那么根据这一性质,我们直接判断前序当中的两两字符,看看是否也出现在后序,如果出现直接乘2
·与上述方法思路一样, 不过实现会简单很多