算法块
文章平均质量分 85
lsd&xql
不积跬步,无以至千里。
展开
-
AVL树的讲解
总结:LL型违规只用进行一次右旋,LR型违规则需要进行一次小范围的左旋,再执行整棵树的右旋,RL型违规则需要先进行小范围上的右旋,再进行整棵树的左旋,RR型只需要进行一次左旋,时间复杂度均为O(1)如下图加入一个节点X首先看当前X节点是平的,再看X对应的父节点也是平的,最终找到方框标记的节点发现不再平衡了,左树高度为1,右树高度为3,而且是RR型违规。如果此处要删掉7,则需要找到7对应右孩子的最小值8去替换7的位置,调整成如下图的样子,此时只需要从9开始查它的父节点依次调整即可,原创 2023-08-19 14:19:51 · 308 阅读 · 0 评论 -
当阿里面试官问什么是hash?什么是布隆过滤器?什么是一致性hash?看这一篇就够了,很肝!也很干!
布隆过滤器可以看作是一系列逻辑加位图的整体,假设准备长度为m的bit类型数组,则占用m/8Byte空间,假设准备了三个hash函数,如果此时来了一个str1,str1会先执行hash函数1,将执行的结果对m取模,将得到的结果在bit数组上的某个位置标记,然后str1先执行hash函数2,将执行的结果对m取模,将得到的结果在bit数组上的某个位置标记,最后str1会执行hash函数3,将执行的结果对m取模,将得到的结果在bit数组上的某个位置标记。对于大量的输入,它会非常离散的分布在整个输出域上面。原创 2023-07-30 09:59:54 · 136 阅读 · 0 评论 -
算法拾遗三十五indexTree和AC自动机
有如上图敏感词信息,首先知道c路径下的一个x节点的fail指针是指向【cde】路径下c下的y节点,x节点从上到下匹配到敏感词abcde中的abc,但是在匹配d的时候失败了,下面所有字符串中哪一个字符串的前缀,它一定跟我必须以c结尾的后缀的一样,且是最长的,如下图abcd中d的fail指针是指向cde中的d节点,它没有去找de而是找的cde。当前来到1位置,我前面没有和我长度为1的凑一对,所以help的1位置填入3,当来到2位置的时候,前面有和我长度为1的凑一对,2位置填入4。你可以继续用ac自动机。原创 2023-07-12 22:37:02 · 184 阅读 · 0 评论 -
算法拾遗三十四线段树
给定固定长度的数组,然后要在数组给定的范围内完成加法【如数组1,200下标元素加6】,更新【7,375范围数组元素更新为4】,查询操作【查询3到999范围内数组元素的合】1、有如上数组,以及对应的线段树图,在其叶子节点上放置【1-1范围上的和,2-2范围上的和,3-3范围上的和,4-4范围上的和】2的n次方的时候是最省空间的【基本上小于等于2N就够用】,如果是2的某次方加1的时候是最费空间的需要小于等于4N的空间。然后,求max,和求累加和,肯定是不一样的,所以修改 pushUp方法。原创 2023-06-26 22:59:50 · 181 阅读 · 0 评论 -
算法拾遗三十三Morris遍历
【栈的大小为二叉树的高度】第二个问题:如何发现所有的叶节点,对于能回到自己两次的节点,第二次回到的时候判断其下的是不是叶子节点:如第二次回到b判断d是否是叶子节点,第二次回到a恢复完后判断e是否是叶子节点,最后再判断整棵树的最右节点是否是叶子节点。2)如果cur有左树,则需要找到左树上的最右节点(mostRight),如果mostRight的右指针指向是空的,那么让它指向当前节点,然后cur向左移动。如果知道x的层数,y是x的右孩子,如果y左树上的最右节点指向非x那么y一定在x的下一层。原创 2023-06-15 00:41:00 · 228 阅读 · 0 评论 -
算法拾遗三十一马拉车算法
L-L’(叫甲)关于C的对称就是R‘到R(叫乙)这一段,甲和乙在L-R这个大回文里面,是关于C对称的,甲和乙是逆序的,甲又在i’为中心的回文里面,甲一定是回文,那么乙一定是回文。根据i‘扩出来的回文区域分,i’是小于i的,所以当初是求过i‘扩出来的大小的,而且当初求的答案一定被保存在R里面的。这种情况扩的范围是跟i‘一样的,因为L-R已经是一个回文了,假设i位置和i’位置扩出同样长的区域,2乘以C-i就是i‘,i’的回文半径长度和i-R的距离谁小,谁就是我至少不用验证的区域。原创 2023-05-30 22:43:47 · 410 阅读 · 0 评论 -
算法拾遗二十七之窗口最大值或最小值的更新结构
搞一个窗口,这个窗口就是原始数组的长度,窗口的最小值(最薄弱点)是-5减去出发位置前面一个数,从而还原出原始数组累加和最薄弱点,还原出的结果还是小于0则不是良好出发点,还原出的结果不小于0则是良好出发点。如果L-R已经达标了,那么L-R内部的所有子数组都是达标的,因为L-R范围内部的子数组max在变小,min在变大。2、L向右移动一位,看看R能不能往右扩,再算从L+1位置到能构成条件的子数组有多少个,再累加进结果。暴力解:搞定循环数组的遍历,从0位置出发找是否有解,从1位置出发找是否有解依次找下去。原创 2023-03-09 22:32:02 · 419 阅读 · 0 评论 -
算法拾遗二十六之暴力递归到动态规划六
0,然后与一下得到limit=1100011,其中1是能放n皇后的位置。如上算是一种解,考虑皇后的时候一行一行的填入皇后,每一行填入一个皇后,这样就不用检查两个皇后是否共行了。同理再定义一个第0行的x位置是皇后放置的位置,或出来三个方框的位置是第一行不能选的。最后是1的不能放皇后是0的可以,然后整体取反变成其他的全1中间的三个1变成三个0。如果y==乙或者甲减去x的绝对值等于y-乙的绝对值【共斜线】之前的某个皇后在(x,y),然后当前位置在(甲,乙)位置。能选的位置是列或上左下与右下还是0的位置。原创 2023-03-01 22:58:19 · 288 阅读 · 0 评论 -
算法拾遗二十六之暴力递归到动态规划五
英雄第一次砍怪是一个0-M范围的(M+1)次的展开,第二次,第三次砍击都是M+1次的展开【可能性总数为M+1的k次方】它依赖dp(4,10)dp(4,9) dp(4,8)dp(4,7);dp(5,11) = dp(5,10)+dp(4,11)-dp(4,7)可由此推导而出。找依赖关系,假设有dp(5,10),还剩五滴血,可以砍十刀,假设攻击范围为(0,3)则推导为对号=(X+1,a+0)取一个最小值。dp(5,11)依赖于dp(4,11…dp(5,10)依赖于(4,10…分析位置依赖:观察X号位置。原创 2023-02-16 23:17:11 · 166 阅读 · 0 评论 -
算法拾遗二十五之暴力递归到动态规划四
如上图所示,假设当前i位置的面值i为3元,当前在第十四列,发现它依赖于(15,14),(15,11)(15,8)(15,5)(15,2)这些位置之和才能得到那个对号的值,那么怎么优化呢?我看星号这个位置,是b+c+d+e,那么推对号则是a+星号的值(发现优化点)推严格表结构是为了建立空间感,发现优化枚举行为可以通过邻近位置推导。如果没有枚举行为记忆化搜索和严格表结构【从表中简单位置推导出复杂位置的解】复杂度一样的好,如果有枚举行为的话,需要搞出。这种情况对号再根据星号来算的话会多算一个d出来。原创 2023-02-08 22:18:53 · 86 阅读 · 0 评论 -
算法拾遗二十五之暴力递归到动态规划三
马走日字格,并且永远从(0,0)位置出发,且棋盘大小为9*10,然后到达a,b位置,必须走k步。给定一个串,并生成一个逆序串,这个逆序串和原串的最长公共子序列就是最长回文子序列。定义一个函数f(str,L,R),返回在str的L到R上最长回文子序列是多长。(范围尝试模型:特别在意考虑样本的开头和结尾共同结合的可能性如何)最长公共子序列为:1234321就是原串的最长回文子序列。L>R是没用的,正常的范围不会出现L>R的情况。L = R-1的时候,相等就是2,不等就是1。子序列:是可以不连续的。原创 2023-01-29 23:06:40 · 208 阅读 · 0 评论 -
算法拾遗二十四之暴力递归到动态规划二
假设有0,1,2三个货物,分别有其重量和价值,我们通过从左往右,0号货物在要的时候【不要的时候】1号货物在要的时候【不要的时候】2号货物在要的时候【不要的时候】,每个分支都走,那么就能找到最大值,因为我们暴力枚举了。如上图,终止条件返回1,是因为我的0位置做了决定是A,我的1位置做了决定是A,2位置做了决定是A,3位置终止返回1,我前面做了决定将111,转换为AAA,我3位置只是搜集一个点数。然后b用ac行吗,发现不行,然后b用ka行吗,发现也不行,返回一个系统最大值回去。可以从尝试入手,改动态规划,原创 2023-01-12 23:32:08 · 421 阅读 · 0 评论 -
算法拾遗二十三之暴力递归到动态规划一
假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2 开始时机器人在其中的M位置上(M 一定是 1~N 中的一个) 如果机器人来到1位置,那么下一步只能往右来到2位置;再找f表的依赖,它依赖g表的L+1和R位置,以及L和R-1位置,再找g表的依赖,g依赖于f这张表的L+1和R位置,以及L和R-1位置。主函数要f这张表里面0-n-1这个格子的值,g要0-n-1的位置,L>R的情况不存在。再来看cur==N,依赖值来到cur=N-1的位置,rest=rest-1的位置。原创 2023-01-03 22:59:50 · 328 阅读 · 0 评论 -
算法拾遗二十二之Dijstra算法优化+认识一些经典的递归过程
定义from,to,other,这里的from,to和other都可能是左中右的任意一个,然后假设从from移动到to上,则需要经历以下三个流程。如上图为例,要找1,2,3这个序列的所有子序列,则可以规划为如上图的形式,关于每个数字是否需要来完成所有情况的获取。3)将剩余的点从other移动到to区里面,这时的from作为上一步的other。1)将1-n-1的圆盘从from移动到other,to成为了other。1位置是3种字符选一个,2位置是2种字符选一个,3位置只剩下一个字符。原创 2022-12-13 22:35:38 · 280 阅读 · 0 评论 -
算法拾遗二十一之图
如上图首先从a出发可以依次走到【b,e,f,c,d】然后d有个回路到c,所以这第一步走完了,然后这条路往上弹,然后看c是否还有其他路可以走,发现没有往上弹到f,发现f的路也走完了,然后往上弹到e,发现路也走完了,然后往上弹到b,b还可以走到c但是发现c被走过了,只能再往上弹,到a的时候发现还可以走k那么走k,最后再看k有没有其他的路,k没有则弹出k,最后回到a发现a的所有路都被走过了,流程结束,此时结果为【a,b,e,f,c,d,k】最后解锁e,发现e没有边则结束流程,最终得到的表返回为最后的答案。原创 2022-10-17 23:24:02 · 198 阅读 · 0 评论 -
算法拾遗二十之并查集相关题解
然后先判断A和C是不是一个集合(本来是一个集合的但是因为联通性的原因导致不是一个集合了,所以应该将A和C合在一起,并将岛屿数量减一),同理然后判断B和C也是一个集合,岛屿数量减一,然后再判断B和D也是一个集合,岛屿数量减一,最后A和D本来就是一个集合了,因为前面的步骤将ABCD合并在一起了则岛屿数量不用减一。分别为A和B,然后再标记左边岛屿的边界节点他们的代表节点为谁(是通过谁感染而来的),那么边界的四个点分别是A,B,A,B感染来的。如上求出了四个岛屿,然后再去掉连接线,然后考虑连通性的事情,原创 2022-10-11 23:35:19 · 174 阅读 · 0 评论 -
算法学习十九贪心算法二
一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。返回最多的宣讲场次。贪心思路:1、选择会议结束时间最早的假设有如下会议时间段:先根据所有会议结束时间排序:【1,2】【1,5】【3,6】【2,8】【3,11】然后【1,2】先选中,然后【1,5】被删掉再选中【3,6】,然后【2,8】被删除,【3,11】被删除返回金条分割的最小代价一块金条切成两半,是需要花费和长度数值一样的铜板的。 比如原创 2022-10-09 22:51:02 · 280 阅读 · 0 评论 -
算法学习十八补二叉树递归套路+贪心算法一
树的头节点是公司唯一的老板。(1)X自己的快乐值加上a不来情况下最大收益加上b不来情况下的最大收益,加上c不来情况下的最大收益。1、首先以x为头的数它的左边和右边子树都是满的,且高度一样,则X为头的二叉树既是完全二叉树也是。2、如果左树是完全二叉树,且右树是满二叉树那么左树高度比右树高度大1个,那么则是完全二叉树,最后再交换成b m1 m2 a 的字符串,发现是一个递增的过程,所以交换a和b只会字典序上升。假设a是某一个在前的字符串,b是某一个在后的字符串,并且按照我的策略已经排完了。原创 2022-09-13 22:19:10 · 402 阅读 · 0 评论 -
算法拾遗十七之二叉树的基本算法+二叉树的递归套路
刚才的方法时间复杂度为O(N),根据前面文章的递归序,假如说我的info里面有三个信息我叶子节点的左子树下面是空,我拿到三个信息,我叶子节点的右子树是空,我也能拿到三个信息,然后把左边和右边拿到的三个信息向上整合成我的叶子节点的三个信息,然后将这个信息给我的父节点。整个过程类似于一个后续遍历(左树加工三个信息,右树加工三个信息),所以叫树型DP这个套路包含两个层次:1、对思想上的极大提醒【以X为头目标怎么实现】2、写代码的时候模板化。原创 2022-08-24 23:19:43 · 258 阅读 · 0 评论 -
算法拾遗十六二叉树相关算法
整个过程发现每个字母都出现了三次,字母第一次出现的位置就是先序遍历,第二次出现的位置连一起就是中序,第三次出现的位置连在一起就是后序得到这颗树的先序遍历和后续遍历,求得先序遍历中X前面得所有节点,与后续遍历X后面得所有节点,得到【a,c】所以求得的节点是X的所有的祖先节点【只是x的祖先节点】,那么如何证明呢?1、首先证明x的所有的祖先节点一定在这样的交集里面由于先序遍历是头左右【所以先序遍历的所有祖先节点一定在X的左边】而后续遍历则是左右头那么X的祖先节点一定在X的后面2、为什么交集只有祖先原创 2022-08-08 23:40:47 · 166 阅读 · 0 评论 -
算法拾遗十五补链表相关面试题
能不能不给单链表的头节点,只给想要删除的节点,就能做到在链表上把这个点删掉?抖机灵的做法:给出要删除的结点,把该节点的next赋值给该节点,然后让该节点跨过下一个结点,让next指针指向下下一个节点其实这样本质上并没有把自己删除掉,除此之外,尾巴结点删除不掉。......原创 2022-08-03 23:41:53 · 91 阅读 · 0 评论 -
算法拾遗十四链表相关面试题
1221是偶数,返回上中点就是第一个2所在的位置,此时第一个2的next指向null,让第二个2的next指向第一个2,第二个1的next指向第二个2,此时有一个头节点,以及一个尾节点,然后头节点和尾节点依次比较,相等的话则都移动,如果移动到有任何不相等的情况则返回false,如果移动到最后有任意一方为null则是一个回文结构。首先遍历到1节点,它的random指针指向3,同时3的next指针指向的是3的克隆节点,那么我就可以让1‘的random指针指向3’了。则直接返回,不是回文结构的链表。......原创 2022-07-24 23:40:09 · 143 阅读 · 0 评论 -
算法拾遗十三加强堆
维护一个小根堆,首先将线段数组中的开始节点从小到大排序,首先将第一个线段的结尾数字放入这个小根堆里面,然后用第二个数的开始节点进入小根堆里面去判断,如果第一个线段的结尾小于第二个线段的开始,那么弹出第一个线段的结尾(此时没有交点,且因为线段数组的开始节点都是排序了的,对于后面的线段也没有焦点),如果第一个线段的结尾大于第二个线段的开始,那么此时则是有焦点的,将第二个线段的结尾放入小根堆里面,这样依次的遍历下去,最终得到一个最大的重合结果。6,如果购买数不足以进入得奖区的用户,进入候选区。...原创 2022-07-22 22:06:22 · 286 阅读 · 0 评论 -
算法拾遗十四前缀树概念以及不基于比较的排序
快排常数时间是最小的,常数时间快。原创 2022-07-21 00:19:35 · 144 阅读 · 0 评论 -
数据结构与算法拾遗十二(堆和堆排序)
1)比较器的实质就是重载比较运算符2)比较器可以很好的应用在特殊标准的排序上3)比较器可以很好的应用在根据特殊标准排序的结构上4)写代码变得异常容易,还用于范型编程即如下方法: @Override public int compare(T o1, T o2) ; 返回负数的情况,就是o1比o2优先的情况 返回正数的情况,就是o2比o1优先的情况 返回0的情况,就是o1与o2同样优先的情况比较器基本用法:注意TreeMap中如果两个对象认为一样我是不会重复加入的,在如上的TreeMap里面,定义的比原创 2022-07-10 22:09:28 · 194 阅读 · 0 评论 -
数据结构与算法拾遗十一(归并排序及其面试题)
在一个数组中,一个数左边比它小的数的总和,叫数的小和,所有数的小和累加起来,叫数组小和。求数组小和。 例子: [1,3,4,2,5] 1左边比1小的数:没有 3左边比3小的数:1 4左边比4小的数:1、3 2左边比2小的数:1 5左边比5小的数:1、3、4、 2 所以数组的小和为1+1+3+1+1+3+4+2=16要求:时间复杂度为O(N)*logN思路:首先对一个数组进行划分:4 3 5 7 2 8 6 41、划分左组,最后划分出来的为4 3,先拷贝3没有小和产生(3的左边没有比他小的),再拷贝4原创 2022-07-10 15:22:02 · 288 阅读 · 0 评论 -
数据结构与算法拾遗十(一些基本的数据结构)
数组模拟队列代码如下:从pushi位置加元素,从polli位置取出元素,模拟一个环形数组实现一个特殊的栈,在基本的功能的基础上,再返回栈中最小元素的功能(1)pop、push、getMin操作的时间复杂度都是O(1)(2)设计的栈类型可以使用现成的栈结构思路1:设计两个栈,一个最小栈一个数据栈,如果当前数小于等于最小栈的栈顶元素,则将当前数放入最小栈中,否则最小栈不加元素,当弹出元素的时候,如果当前数等于最小栈的栈顶元素的时候则弹出最小栈的栈顶元素否则不弹出。思路2:设计两个栈,一个数据栈,原创 2022-06-30 22:55:26 · 173 阅读 · 0 评论 -
数据结构与算法拾遗九(异或运算)
特点:1、相同为0不同为1(二进制位上面看)2、代表无进位相加3、0^N = N4、N^N = 05、异或运算满足交换律和结合律a^b= b^a(a^b) ^ c= a ^ (b ^ c)如下证明:在某一位上如果有偶数个1那么最后的结果为0在某一位上如果有奇数个1那么最后的结果为1异或运算的效率高于加减法:如下代码逐行分析:arr[i] = 甲arr[j] = 乙1)arr[i] = 甲 ^乙2)arr[j] = 甲^乙 ^ 甲 = 乙3)arr[j] = 甲 ^ 乙 ^原创 2022-06-26 23:46:25 · 293 阅读 · 0 评论 -
数据结构与算法拾遗八(认识复杂度)
执行时间固定的操作都是常数时间的操作。执行时间不固定的操作,都不是常熟时间操作。首先是需要确定算法流程的总操作数量与样本数量之间的表达式关系,只看表达式最高阶项的部分。这里以选择排序为例首先从0-N-1的位置找到最小值(N个数看一遍,找最小值(依次比较)将找到的最小值放0位置(O(1)))再从 1-N-1的位置找到最小值(N-1个数看一遍,找最小值(依次比较)将找到的最小值放0位置(O(1)))2-N-1(N-2个数看一遍,找最小值(依次比较)将找到的最小值放0位置(O(1原创 2022-06-22 23:42:27 · 129 阅读 · 0 评论 -
数据结构与算法拾遗七
说明:process(arr, L, R)指:把arr[L…R]上排好序,定义如此!merge(arr, L, M, R)指:如果L…M已经有序,并且M+1…R上已经有序。那么通过merge过程,让L…R上整体有序。定义如此!举个例子:数组:3 1 4 2位置:0 1 2 3主函数调用process(arr, 0, 3)意思是让0…3范围有序首先调用process(arr, 0, 1) :arr[0…1]变成:1,3其次调用process(arr, 2, 3) :arr[2…3]变成:2,4最后调用mer原创 2022-06-17 01:07:46 · 98 阅读 · 0 评论 -
数据结构与算法拾遗六
https://leetcode.cn/problems/maximum-depth-of-binary-tree用先序数组和中序数组重建一棵树https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal先序数组和中序数组无重复值则需要建出整棵树返回如有如下先序和中序遍历顺序:1,2,3,4,5,6,73,2,4,1,6,5,7则我们首先可以确定根节点为1然后根据根节点划分出中序遍历原创 2022-06-09 23:32:48 · 100 阅读 · 0 评论 -
数据结构与算法拾遗五
数据结构与算法拾遗五比较器合并k个升序链表二叉树判断两棵树是否相等判断一棵树是否为镜面树比较器比较器常规用法主要记住返回1则是第二个参数在前返回-1则是第一个参数在前 public static class Student { public String name; public int id; public int age; public Student(String name, int id, int age) { this.name = name; this.i原创 2022-05-25 23:19:22 · 82 阅读 · 0 评论 -
数据结构与算法拾遗四
数据结构与算法拾遗四位图位图的实现位运算实现 + - * /加法减法乘法除法位图位图的功能:如果数字范围是确定的,那么就可以做出一个集合来告诉你数字是否存在。位图的好处:能够极大的压缩空间,比如说我的数字范围确定是0-31的范围,那么我就可以用一个int来表示出来这个范围int 为4字节32位。如果要表示 -10到10,则可以转换为0-20的范围。位图的实现private long[] bits;//注意此处是一个非包装类long[],初始化时里面的值为0public BitMap(int原创 2022-05-25 21:15:51 · 136 阅读 · 0 评论 -
数据结构与算法拾遗三
数据结构与算法拾遗三单链表和双链表的定义单链表反转双链表反转单链表实现任意数据类型的队列和栈队列实现栈实现用双向链表实现双端队列(可从头部加减及尾部加减)K个节点的组内逆序调整两个链表相加两个有序链表合并单链表和双链表的定义单链表:值,一条next指针双链表:值,一条last指针,一条next指针单链表反转首先一个正常链表为1->2->3->null。其中有一个head指针指向1,然后我们要设计一个方法传入head节点,调整链表的顺序为3->2->1->nu原创 2022-05-15 21:03:10 · 232 阅读 · 0 评论 -
数据结构与算法拾遗二
二分法分别对应一个简单二分以及对数器写法// arr保证有序 public static boolean find(int[] arr, int num) { if (arr == null || arr.length == 0) { return false; } int L = 0; int R = arr.length - 1; while (L <= R) { int mid = (L + R) / 2; if (arr[mid] == num) {原创 2022-05-11 22:22:26 · 218 阅读 · 0 评论 -
数据结构与算法拾遗一
数据结构:连续结构加跳转结构租车1、数据结构是存储、组织数据的方式2、精心选择的数据结构可以带来更高的运行或者存储效率3、数据结构是很多算法得以进行的载体数组结构:寻址容易,增删数据难跳转结构:寻址难,增删数据容易求数组L到R的和public static class RangeSum1 { private int[] arr; public RangeSum1(int[] array) { arr = array; } public int rangeSum(原创 2022-04-12 23:41:18 · 437 阅读 · 0 评论 -
Codeforces 1303B National Party
B. National ProjectYour company was appointed to lay new asphalt on the highway of lengthnn. You know that every day you can either repair one unit of the h...原创 2020-02-13 12:04:42 · 455 阅读 · 0 评论 -
POJ 3278 Catch that cow
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,0...原创 2020-02-12 13:15:15 · 97 阅读 · 0 评论 -
Dungeon Master
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south...原创 2020-02-12 13:03:15 · 201 阅读 · 0 评论 -
POJ1321 棋盘问题
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n当为...原创 2020-02-12 11:48:47 · 813 阅读 · 0 评论