康托展开
qq_20340417
这个作者很懒,什么都没留下…
展开
-
康托展开
显然的,给出n个数,范围在1-n间,每个数各不相同,即为全排列问题,方案数为n!。 那么现在给出一个n个数的全排列,求在n个数的全排列按字典序排序以后,给出的全排列排第几。 例子: 3个数的全排列,按字典序排序后为123 132 213 231 312 321 “213”是第3名。 此时我们需要用到一个叫“康托展开”的东西。 是这样计算的,一开始ans=1: 设当前在计算第i个数,则x=比a[i]小原创 2017-10-28 11:14:42 · 147 阅读 · 0 评论 -
滑块
题意(原题): 给出起始与目标两个3*3的矩阵,矩阵内数由0-8组成且互不相同。每次操作可以将0上下左右的任意数与0交换。求到达目标矩阵的最小步数。 思路(请先预习康托展开): 把每个状态进行康托展开成为一个数,随即宽搜即可。 代码:#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> using names原创 2017-10-29 15:36:43 · 206 阅读 · 0 评论