<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_44736151的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_44736151</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_44736151]]></copyright><item><title><![CDATA[学习基本数据结构的心得]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/100929935</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/100929935</guid><author>qq_44736151</author><pubDate>Tue, 17 Sep 2019 21:35:47 +0800</pubDate><description><![CDATA[1，在C++中new分配一个空间是很慢的，因此我要用数组模拟链表。
首先感谢yxc大佬教会了我很多，非常感谢。
2，单链表，
创建一个单链表需要两个数组
e[i],用于存储在i下标 的变量
ne[i],用于存储在i下标连接下一个数组的下标。
head=-1;表示头结点。
idx=0;表示下标。
3
（1）在头结点位置插入一个x；
e[++idx]=x;
ne[idx]=head;
head=idx...]]></description><category></category></item><item><title><![CDATA[递归转非递归]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98478007</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98478007</guid><author>qq_44736151</author><pubDate>Mon, 05 Aug 2019 10:03:31 +0800</pubDate><description><![CDATA[有的时候我们在做一道OJ的时候常常会用到递归，但是有时候题目就会设置一些陷阱，他把栈的内存设置的更小一点的话，那么我们再次用递归的话就会发生爆栈，所以我们要去尝试改成得递归哦！！！
下面呢 我就用一道例题来进行讲解。
题目描述：
从 1~n 这 n 个整数中随机选取任意多个，输出所有可能的选择方案。
首先我们需要创建一个结构体来存储一些变量
比如说状态 state代表走哪一个位置了。
剩下的变量是...]]></description><category></category></item><item><title><![CDATA[递推与递归算法七之—奇怪的汉诺塔]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98477363</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98477363</guid><author>qq_44736151</author><pubDate>Mon, 05 Aug 2019 08:12:52 +0800</pubDate><description><![CDATA[题目描述：汉诺塔问题，条件如下：
1、这里有A、B、C和D四座塔。
2、这里有n个圆盘，n的数量是恒定的。
3、每个圆盘的尺寸都不相同。
4、所有的圆盘在开始时都堆叠在塔A上，且圆盘尺寸从塔顶到塔底逐渐增大。
5、我们需要将所有的圆盘都从塔A转移到塔D上。
6、每次可以移动一个圆盘，当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时，可将圆盘移至这座塔上。
请你求出将所有圆盘从塔A移动到塔D，所需的最小移...]]></description><category></category></item><item><title><![CDATA[递归与递推算法六之—分形之城]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98477322</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98477322</guid><author>qq_44736151</author><pubDate>Mon, 05 Aug 2019 08:03:47 +0800</pubDate><description><![CDATA[题目描述：
城市的规划在城市建设中是个大问题。
不幸的是，很多城市在开始建设的时候并没有很好的规划，城市规模扩大之后规划不合理的问题就开始显现。
而这座名为 Fractal 的城市设想了这样的一个规划方案，如下图所示：
city.png
当城区规模扩大之后，Fractal 的解决方案是把和原来城区结构一样的区域按照图中的方式建设在城市周围，提升城市的等级。
对于任意等级的城市，我们把正方形街区从左...]]></description><category></category></item><item><title><![CDATA[递归与递推算法五—约数之和]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98474624</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98474624</guid><author>qq_44736151</author><pubDate>Mon, 05 Aug 2019 07:39:24 +0800</pubDate><description><![CDATA[题目描述：假设现在有两个自然数A和B，S是AB的所有约数之和。
请你求出S mod 9901的值是多少。
思路分析：求解约数之和有个数学的公式
第一步先把A分解成 X1a1 * X2a2 … Xna3.
A^B= X1a1*B * X2a2*B … Xna3*B.
根据乘法的分配律可以得出A^B的约数之和就是
（X10+X11+…X1a1*B)（X20+X21+…X2a2*B)…*（Xn0+Xn1...]]></description><category></category></item><item><title><![CDATA[递归与递推算法四—费解的开关]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98474204</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98474204</guid><author>qq_44736151</author><pubDate>Sun, 04 Aug 2019 21:17:52 +0800</pubDate><description><![CDATA[题目描述：
你玩过“拉灯”游戏吗？25盏灯排成一个5x5的方形。每一个灯都有一个开关，游戏者可以改变它的状态。每一步，游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应：和这个灯上下左右相邻的灯也要相应地改变其状态。
思路分析：如果用传统的BFS来做的话也可以，但是时间复杂度会很高，但是这里有一种更好的算法，用DP加递归进行不断搜索直到找到最优解。
首先我们可以假设一下将第一排固定...]]></description><category></category></item><item><title><![CDATA[递归与递推算法三—递归实现排列型枚举]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98474052</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98474052</guid><author>qq_44736151</author><pubDate>Sun, 04 Aug 2019 20:53:28 +0800</pubDate><description><![CDATA[题目描述：把 1~n 这 n 个整数排成一行后随机打乱顺序，输出所有可能的次序。
思路：
这些数字对我们来说已经不是选或者不选了，而是都要选，只是分时间，什么时候进行选择
这次我们要用一个DP来表示那个被选择了，用一个容器来存储那些被选中的。
通过递推来进行实现，当到达边界的时候输出。
代码：
#include
#include
using namespace std;
vector chosen...]]></description><category></category></item><item><title><![CDATA[递归与递推算法二—递归实现组合型枚举]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98473920</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98473920</guid><author>qq_44736151</author><pubDate>Sun, 04 Aug 2019 20:39:15 +0800</pubDate><description><![CDATA[题目描述：从 1~n 这 n 个整数中随机选出 m 个，输出所有可能的选择方案。
思路分析：每个数字都有被选中或者不被选择两种状态.
我们需要记录当前选择了哪些数字。
如果本次选择中判断后面还剩下多少数字为被选中，如果当前数字加上为被选中的数字都达不到m个数字那么就退出。进而降低时间的复杂度。
最好递推到边界就退出。然后输出结果。
代码：
#include
using namespace std;...]]></description><category></category></item><item><title><![CDATA[递推与递归算法一—实现指数型枚举]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/98473742</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/98473742</guid><author>qq_44736151</author><pubDate>Sun, 04 Aug 2019 20:28:06 +0800</pubDate><description><![CDATA[题目描述：从 1~n 这 n 个整数中随机选取任意多个，输出所有可能的选择方案。
当我们看到这个题目的时候，我们首先进行分析
1：我们肯定要遍历每一个数字，但是每一个数字都有两个被我们选择的状态，
那就是要么选他，要么不选。
2：所以我们会选择递归，当然我们也要选择一个变量来记录那些数字已经被选中了。为了降低程序复杂度，在n不是很大的时候我们会选择用DP来进行存储我们想要的状态。
代码：
#inc...]]></description><category></category></item><item><title><![CDATA[位运算之算法三—最短Hamilton路径]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/97627227</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/97627227</guid><author>qq_44736151</author><pubDate>Mon, 29 Jul 2019 11:09:36 +0800</pubDate><description><![CDATA[核心思路：
1 找到当前状态，即当前被用过的点。
2 当前所处的位置。
用一个二维数组保存f[state][j];
state 就是当前状态，通过二进制状态压缩进行表示，例如有二十组，用1&lt;&lt;20-1;表示状态已满。
j 就是当前点的位置。
通过每次判断当前位置是否遍历用state&gt;&gt;j&amp;1;
然后再判断上一次的经过的点，寻找最小值，最后f[1&lt;&lt;20-...]]></description><category></category></item><item><title><![CDATA[位运算之算法二——大数相乘]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/97498425</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/97498425</guid><author>qq_44736151</author><pubDate>Sat, 27 Jul 2019 11:47:42 +0800</pubDate><description><![CDATA[习惯一种思维方式
如果可以的话，熟练掌握并利用位运算，能够帮助我们理解程序运行中的种种表现，提高程序运行的时空效率，降低编程的复杂度！
eg:
假设求a*b对p取模，a,b,p都是在10的18次方以内的
如果我们用惯性思维，那么即使是八个字节的long long 都装不下，那么我们再次想一下用位运算，
同上一篇文章，b用二进制每一位表示,假设有k位，没一位都有个值，设第i位的值位Ci,
那么
b=...]]></description><category></category></item><item><title><![CDATA[位运算符之算法一快速幂]]></title><link>https://blog.youkuaiyun.com/qq_44736151/article/details/97492884</link><guid>https://blog.youkuaiyun.com/qq_44736151/article/details/97492884</guid><author>qq_44736151</author><pubDate>Sat, 27 Jul 2019 10:30:30 +0800</pubDate><description><![CDATA[位运算符之算法一
eg::求 a*b%p;
掌握位运算符的用法来解决这道题
总所周知任何一个整数都可以用不同的若干指数不同的2的次幂的和。
假设b的二进制位数为k,C表示每一位的数值哦！
b=C(k-1)2^(k-1)+…+C02(0);
ab=aC(k-1)*2(k-1)x…xa^C0*2(0);;
也就是用乘法表示出来，
用k次a的次幂相乘。
当C为零的时候这个a的次幂也就为一，经过每次判断b...]]></description><category></category></item></channel></rss>