<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chuck001002004的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chuck001002004</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chuck001002004]]></copyright><item><title><![CDATA[基础篇——数论基础]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50548619</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50548619</guid><author>chuck001002004</author><pubDate>Wed, 20 Jan 2016 15:09:42 +0800</pubDate><description><![CDATA[数论基础主要有三点。1.最大公约数。2.素数问题。3.快速幂取模。
一：最大公约数
正常的思路，求最大公约数都是从2开始到n-1求最大能整除的数即为最大公约数。但这样算的时间为o(n)，相当耗时。故在求最大公约数时，提出了辗转相除法。
现有a,b两个数，a除以b的商和余数分别是p和q，所以a=b*p+q，所以gcd( b , q )整除a，b故而整除gcd( a ,b )。反之因为q=a-b]]></description><category></category></item><item><title><![CDATA[高级篇——Dinic最大流算法]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50483802</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50483802</guid><author>chuck001002004</author><pubDate>Fri, 08 Jan 2016 16:22:06 +0800</pubDate><description><![CDATA[#include 
#include 
#include 
#include 
#define INF 9999999
using namespace std;
int n,m;
int c[205][205],dis[205];

int BFS()
{
    queueque;
    memset(dis,-1,sizeof(dis));
    dis[1]=0;
    que.pus]]></description><category></category></item><item><title><![CDATA[HDU 1075——Trie树]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50429068</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50429068</guid><author>chuck001002004</author><pubDate>Tue, 29 Dec 2015 20:08:40 +0800</pubDate><description><![CDATA[http://acm.hdu.edu.cn/showproblem.php?pid=1075

#include 
#include 
#include 
#include 
using namespace std;
char a[3005],b[15];
typedef struct TrieNode
{
    bool end;
    struct TrieNode *next[26]]]></description><category></category></item><item><title><![CDATA[HDU 1251——Trie树]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50428742</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50428742</guid><author>chuck001002004</author><pubDate>Tue, 29 Dec 2015 19:05:09 +0800</pubDate><description><![CDATA[http://acm.hdu.edu.cn/showproblem.php?pid=1251

#include 
#include 
#include 
#include 
using namespace std;
char a[15];
typedef struct TrieNode
{
    int cnt;
    struct TrieNode *next[26];
}Trie;]]></description><category></category></item><item><title><![CDATA[中级篇——字典树（Trie树）]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50421065</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50421065</guid><author>chuck001002004</author><pubDate>Mon, 28 Dec 2015 19:55:58 +0800</pubDate><description><![CDATA[Trie树也叫字典树，查新效率高且适用于字符串查找。相关例题HDU 1671,1251,1075,1247
字典树由链表构成，以查询英文字母组成的例题为例。建立字典树时，每个节点都有26个子节点，代表其后可能出现的26个英文字母。且每个节点还需要一个bool型的参数end，当end=true时，说明该节点是一个单词的结尾字母。
建立字典树需要一个根节点root，root不存储任何信息，初始化时]]></description><category></category></item><item><title><![CDATA[HDU 1671——Trie树应用]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50419898</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50419898</guid><author>chuck001002004</author><pubDate>Mon, 28 Dec 2015 16:40:04 +0800</pubDate><description><![CDATA[http://acm.hdu.edu.cn/showproblem.php?pid=1671
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int T,n;
char num[10005][15],phone[15];
bool flag;
typedef st]]></description><category></category></item><item><title><![CDATA[POJ 2676/2918——数独DFS]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50412136</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50412136</guid><author>chuck001002004</author><pubDate>Sun, 27 Dec 2015 13:39:21 +0800</pubDate><description><![CDATA[广搜算法能有效求解最短路问题，深搜算法可以巧解数独类的问题，以POJ2676和2918为例
POJ 2676：http://poj.org/problem?id=2676
不完整的数独，0代表未填入数字，把数度补充完整
分析：对于一个数x，填入数独是需要看其所在行和列是否有与其相等的值，我们需要定一两个数组row[ ][ ] 和col[ ][ ] 。row[ i ] [ j ] 表示数值 j]]></description><category></category></item><item><title><![CDATA[POJ2251——BFS三维迷宫]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50409692</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50409692</guid><author>chuck001002004</author><pubDate>Sat, 26 Dec 2015 19:12:24 +0800</pubDate><description><![CDATA[POJ2251：http://poj.org/problem?id=2251
题意：输入l，r，c 三个数，代表一个 l 层的 r * c 大小的迷宫，S表示起点，E表示终点，‘ . ’表示可以走，‘#’表示走不了，求从起点到终点的最少步数，若走不出则输出“Trapped！”
分析：是不是被吓住了！！！其实就是比二维的迷宫多了上下两个点而已，写入BFS算法就是了。
代码：
#include]]></description><category></category></item><item><title><![CDATA[POJ3669——BFS经典]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50408985</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50408985</guid><author>chuck001002004</author><pubDate>Sat, 26 Dec 2015 16:16:11 +0800</pubDate><description><![CDATA[典例POJ3669：http://poj.org/problem?id=3669
题意：有n个点，每个点在一个特定的时刻 t 会被小星星砸中，其上下左右四个点也会受连累，依次输入n个点的横纵坐标及被砸的时间。现在从原点出发，问最少经过多久才能安全？若不能逃脱则输出-1
分析：建立一个记录被砸时间的数组bt[ ][ ]，输入数据时，先初始化所有的点为INF。再建立二维数组vis[ ][ ]监视每]]></description><category></category></item><item><title><![CDATA[中级篇——普通搜索之BFS]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50404122</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50404122</guid><author>chuck001002004</author><pubDate>Fri, 25 Dec 2015 16:49:02 +0800</pubDate><description><![CDATA[上一篇讲了DFS算法，特点是不撞南墙不回头，这一片讲讲与之相反的广度优先搜索（BFS）。形象的说，广搜是从根节点V0出发，遍历其未访问过的子节点W1，W2......接着从其子节点出发遍历W1未访问过的子节点，完事遍历W2未访问过的子节点，以此类推完成广搜遍历。
因此，广搜算法在深搜算法的基础上需要多一个用于记录下一个根节点的队列que[ ]，只要每访问到一个未被访问过的节点，便将节点加入队尾，]]></description><category></category></item><item><title><![CDATA[POJ2386——经典的DFS]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50402492</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50402492</guid><author>chuck001002004</author><pubDate>Fri, 25 Dec 2015 12:47:51 +0800</pubDate><description><![CDATA[http://poj.org/problem?id=2386
题意：n*m的院子，‘ W ’代表有水，‘ . ’代表无水，若一个格子的八个方向存在‘ W ’则可以看做一个水塘，求一共有几个水塘
分析：经典的DFS，从第一个点开始遍历，只要发现其为‘ W ’便将他变为‘ . ’，之后遍历它的八个方向，如果发现有‘ W ’存在则重复上述操作。
#include 
#include 
#inclu]]></description><category></category></item><item><title><![CDATA[中级篇——普通搜索之DFS]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50396329</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50396329</guid><author>chuck001002004</author><pubDate>Thu, 24 Dec 2015 18:53:54 +0800</pubDate><description><![CDATA[深度优先搜索（DFS）和广度优先搜索（BFS）是搜索问题中比较常见的方法。此篇介绍DFS算法思想。
现有n个点，m条边，每条边按照起点和终点输入。为表示点与点之间存在边，需要建立一个邻接矩阵a[ n ] [ n ]，a[ i ] [ j ]=1表示 i 与 j 两点间存在边，反之为0（邻接矩阵限于小数据量）。另外还需设一个一维数组vis[ n ]，vis[i]==1表示第 i 个节点已被访问过，]]></description><category></category></item><item><title><![CDATA[中级篇——背包问题3（多重背包）]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50340819</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50340819</guid><author>chuck001002004</author><pubDate>Thu, 17 Dec 2015 14:01:46 +0800</pubDate><description><![CDATA[上一篇讲的完全背包是指在所有物品件数无限多的情况下选择最值，现在引申出多重背包问题，即各物品个数均有限且不一定相同，求轙类情况下的最值。]]></description><category></category></item><item><title><![CDATA[中级篇——背包问题2（完全背包）]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50332827</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50332827</guid><author>chuck001002004</author><pubDate>Wed, 16 Dec 2015 20:48:57 +0800</pubDate><description><![CDATA[01背包是指每件物品有且只有一件，而完全背包则是每件物品件数无限，求装入背包所对应的最值。
完全背包也有公式，在01背包公式的基础上加以改动。
完全背包公式：dp [ j ] =min/max( dp [ i ] [ j ] ,dp [ j - w [ i ] ] + v [ i ] )  。
给出一道例题加以分析。


典例：http://acm.hdu.edu.cn/showpro]]></description><category></category></item><item><title><![CDATA[中级篇——背包问题1（01背包）]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50313777</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50313777</guid><author>chuck001002004</author><pubDate>Tue, 15 Dec 2015 12:21:53 +0800</pubDate><description><![CDATA[N件物品，没见有重量Wi，价值Vi；选其中几件放入容量为M的背包中，求最大价值。——经典背包问题
背包问题分三类：1.01背包：每件物品仅一件，可以不将背包装满（要么取0件要么1件）
                                2.完全背包：每件物品仅一件，须将背包装满。
                                3.多重背包：每件物品可不止一件，可]]></description><category></category></item><item><title><![CDATA[中级篇——优先队列]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/50262241</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/50262241</guid><author>chuck001002004</author><pubDate>Fri, 11 Dec 2015 12:24:30 +0800</pubDate><description><![CDATA[优先队列与一般队列不同，插入新元素时不是直接将新元素插入到队尾，而是根据优先级插入到其所在优先级的相应位置。
优先队列分为两种：最大优先队列和最小优先队列。故每次取出的是队列中最大优先级和最小优先级。可以根据默认的优先级排序也可自定义优先级排序。
所需头文件：“queue.h”和“functional.h”。
一、优先队列支持的操作
q.size();  //返回队列元素个数
q.empt]]></description><category></category></item><item><title><![CDATA[C++类和继承]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/49535191</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/49535191</guid><author>chuck001002004</author><pubDate>Sat, 31 Oct 2015 18:21:30 +0800</pubDate><description><![CDATA[C++与C语言类似，运算效率高，与java也有相似之处
一：基础
1.输入：C语言中使用scanf来输入，需要声明变量的类型，头文件include。
               C++中只需要“cin>>变量”即可实现，头文件include。
2.输出：C语言输出用printf执行，也需要声明变量的类型。
               C++用“cout


二：类与继承
类在]]></description><category></category></item><item><title><![CDATA[中级篇——图的最小割点]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/49384217</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/49384217</guid><author>chuck001002004</author><pubDate>Sat, 24 Oct 2015 12:48:25 +0800</pubDate><description><![CDATA[给出一幅图：
现在需要去掉一个点，使得全图不再连通，如何完成？
通过观察图可以发现在除去顶点2后，定点5,6无法连通，故顶点2是本图的割点。
如何完成这一算法呢？我们结合深度搜索来实现。首先引入一个概念——时间戳。时间戳就是记录顶点在遍历时第几个被访问，例如上图我们定义num[]数组记录时间戳，以1为起点开始，则num[1]=1；接下来是顶点3，故num[2]=3，即3号顶点时间戳为2。以此]]></description><category></category></item><item><title><![CDATA[中级篇——最小生成树]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/48659265</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/48659265</guid><author>chuck001002004</author><pubDate>Tue, 22 Sep 2015 19:40:26 +0800</pubDate><description><![CDATA[最小生成树可以解决一类最短路径问题，现在给出一幅图：
每条路上的数值代表权值。现在需要从1到6找一条最便捷的路径。

第一步：从1出发有1——2,1——3，两条边。1——2比1——3短，故先连通1——2。


第二步，接下来看1——3,2——3,2——4，三条边，1——3和2——3都能连通1,2,3三个点，但1——3明显小于2——3故连通2——3.


接下来，最短的边是4——6]]></description><category></category></item><item><title><![CDATA[中级篇——Dijkstra算法求最短路径]]></title><link>https://blog.youkuaiyun.com/chuck001002004/article/details/48497923</link><guid>https://blog.youkuaiyun.com/chuck001002004/article/details/48497923</guid><author>chuck001002004</author><pubDate>Wed, 16 Sep 2015 18:06:02 +0800</pubDate><description><![CDATA[在讲Bellmen算法时提到过Dijkstra算法，其在处理稠密图时的时间优于Bellmen算法，但缺点是不能处理带有负边权值的路径问题。
        Dijkstra算法需要定义一个二维数组e[n][n]（n表示一共n个点），每个单元存放一个值，e[i][j]表示i点到j点的距离，e[i][i]的点距离均设为0（自己到自己距离为0）。此外还需要一个一维数组dis[n]，来记录起始点到每个点]]></description><category></category></item></channel></rss>