摘要:
题意:给出一串无序的数列,编写一个O(n)的算法求解排序后相邻两个数的最大差值。 解法: nlog(n)的算法大家应该很容易就能想到,只要排序一下再扫描一遍即可。但是为了构造O(n)的算法,肯定不能使用常规排序算法,我们先考虑一下桶排序(非正解),开一个能囊括数值范围的数组,把数据作为下标放进去,再 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1536 给出能够取的方法序列,然后求基本石子堆问题。 只要用S序列去做转移即可。 注意has初始化的一些技巧 阅读全文
摘要:
讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用。 学习求解SG函数的各种方法 SG函数求解博弈问题速讲 对于一个问题,我们把每一个局面抽象为一个点,那么局面的变化 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=5009 题目要求对空序列染成目标颜色序列,对一段序列染色的成本是不同颜色数的平方。 这题我们显然会首先想到用DP去解决,dp[i] = min( dp[i] , dp[j] + cost(i , j) )。但是枚举 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=5015 这题一开始就想到用矩阵快速幂做,不过思路跑歪了,想着从a[n,m]去逆推出a[0,0~m]每一位的倍数关系啥的。发现比较难求解而且233正向递推好写,反向涉及除法就很难写了。 其实没有那么复杂,我们把a[1 阅读全文
摘要:
给定三种操作,将排列A转化为排列B,求最少步骤。 这种题目可以只跑一次bfs,比如只跑"12345678",那么如果遇到"23456781"->某个字符串呢?因为每一个数字都是等价的,我们可以把2映射为1,3映射成2,以此类推。这样就可以用"12345678"跑出来的操作序列了。 阅读全文
摘要:
因为是计算还原成一种局面的最短步骤,应该想到从最终局面开始做bfs,把所有能到达的情况遍历一遍,把值存下来。 bfs过程中,访问过的局面的记录是此题的关键,9*9的方格在计算过程中直接存储非常占内存。而这个显然是12345678x的不同排列,考虑康拓展开来记录,每个局面hash成一个整数。步骤我先算 阅读全文
摘要:
对于一个集合内所有元素的排列,康拓展开是一个无冲突的hash法。其规则便是将排列在逻辑上排好序,然后每个排列的序号即是hash值。 关键就在如何快速求出序号和快速还原啦。 首先我们确定一好集合内各元素的大小关系,然后开始处理。 生成: 对于一个排列(长度为n),我们要算出它前面有多少比它小的序列,如 阅读全文