9. 一个数组,每个位置的值对应下标。重新排列,要求对应位置上不能有同下标相同的值,即原先a[0]=0,重排后a[0]不可以等于0。输出总共有多少种重新排列的方法。
动态规划:
假设
增加了一个a[n]=n,那他一定要与前面某个交换
假设前面 n-1 个已经按照要求排好了,
(n-1)f(n-1)
假设前面 n-1 个中有一个 a[k]=k,其他 n-2 个排好了,则交换 n和k : (n-1)f(n-2)
f(n)=(n-1)(f(n-1)+f(n-2))
不知道对不对。。。