fork download
  1. from itertools import permutations
  2.  
  3. t = [[0 for j in range(i)] for i in range(10)]
  4.  
  5. for n in range(1, 10):
  6. for p in permutations(range(1,n+1)):
  7. c = 0
  8. for i in range(n-1):
  9. if p[i+1] == p[i]+1:
  10. c += 1
  11. t[n][c] += 1
  12.  
  13. for i in t:
  14. for j in i:
  15. print "%6d" %j,
  16. print
  17. print
  18.  
  19. dp = [[-1 for j in range(i)] for i in range(10)]
  20. dp[1][0] = 1
  21.  
  22. def f(n,k):
  23. if not( 0 <= k <= n-1 ):
  24. return 0
  25. if dp[n][k] != -1:
  26. return dp[n][k]
  27. dp[n][k] = (k+1)*f(n-1,k+1)+(n-1-k)*f(n-1,k)+f(n-1,k-1)
  28. return dp[n][k]
  29.  
  30. for n in range(10):
  31. for k in range(n):
  32. print "%6d" %f(n,k),
  33. print
  34. print
Success #stdin #stdout 0.67s 23296KB
stdin
10
stdout
     1
     1      1
     3      2      1
    11      9      3      1
    53     44     18      4      1
   309    265    110     30      5      1
  2119   1854    795    220     45      6      1
 16687  14833   6489   1855    385     63      7      1
148329 133496  59332  17304   3710    616     84      8      1


     1
     1      1
     3      2      1
    11      9      3      1
    53     44     18      4      1
   309    265    110     30      5      1
  2119   1854    795    220     45      6      1
 16687  14833   6489   1855    385     63      7      1
148329 133496  59332  17304   3710    616     84      8      1