- 博客(31)
- 收藏
- 关注
原创 区间DP-矩阵连乘问题
#include #include #include #include #include #include #include #include #include /*=======================================矩阵连乘问题dp(i, j) = min( dp(i, k) + dp(k + 1, j) + S);
2015-10-19 20:23:25
316
原创 Node:二叉树搜索
为了看看二叉树重建,复习了一下二叉树(指针实现)#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))typedef long long int64;using namespace std;const int maxn=10010
2015-07-24 12:02:38
399
原创 Node:状压DP-1(棋子问题)
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))using namespace std;const int maxn = 310;int n, dp[10][maxn];/*在一个棋盘上放棋子,上下左右都没有棋子,一共有多
2015-07-20 14:10:03
300
原创 Node:向经典致敬(八皇后)
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))using namespace std;const int maxn=110;bool l[maxn], raw[maxn], r[maxn];/*n皇后经典回溯法,好久不
2015-07-20 09:35:42
377
原创 Node:Trie数(字典树)
为了看一看AC自动机,先看看Trie树#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))using namespace std;const int maxn=26;int n;/*Trie树(字典树)*/struc
2015-07-19 19:01:42
410
原创 Node:KMP之next数组
#include #include #include #include #include #include using namespace std;const int maxn=1010;int pos[maxn];int n;/*KMP算法中的next数组求法图解:|**************0000000000**************.............
2015-07-19 12:39:17
328
原创 Network:测试socket发送结构体
// SendByClient.cpp : 定义控制台应用程序的入口点。// 发送方#include "stdafx.h"#include #include #pragma comment(lib,"ws2_32.lib")const int HOST_INFO_SIZE = 32;struct PACKAGE{ //定义成指针就坑了,不过暂时还不知道为什么 char m
2015-07-18 11:54:56
446
原创 Network:UDP广播消息的测试
这篇博客流程比较规范:http://blog.youkuaiyun.com/great3779/article/details/5699986我自己的代码如下,仅仅是测试// BroadCastReceiver.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #pragma comment(lib,"ws2_32.li
2015-07-17 13:09:28
962
原创 Node:最短路径之Dijkstra堆优化
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))#define INF 0xfffffffusing namespace std;const int maxn=1010;//到节点的距离和第i个节点的前一个节点int di
2015-07-16 23:08:08
439
原创 Node:最短路径算法之Dijkstra
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))#define INF 0xfffffffusing namespace std;const int maxn=1010;//到节点的距离和第i个节点的前一个节点int di
2015-07-16 22:43:37
386
原创 Node:区间DP-1
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))#define INF 0xfffffffusing namespace std;const int maxn=310;int sum[maxn],dp[maxn][maxn];
2015-07-16 20:52:59
307
翻译 Network:smtp协议
#include #include #pragma comment(lib,"ws2_32.lib")void sendMessage(char *buffer,SOCKET socket){ if (SOCKET_ERROR == send(socket, buffer,strlen(buffer),0)) printf("send failed...\n");}void
2015-07-16 12:13:15
372
原创 Network:socket发送http请求
#include #include #include #include #pragma comment(lib,"ws2_32.lib")using namespace std;bool parse_url(string &url_string, string &host_string, string &resource_string){ const char *url =
2015-07-15 21:50:12
314
原创 Network:socket查询主机信息
// NetLookup.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #pragma comment(lib,"ws2_32.lib")int _tmain(int argc, _TCHAR* argv[]){ WSADATA wsaData = { 0 }; /* struct
2015-07-15 16:51:46
361
原创 Network:检验和
//返回值2个字节,16位unsigned short CheckNum(unsigned short* Buffer, int len){ //32位,4个字节 long int check = 0; while( len > 1) { check += *Buffer++; //一次加工16位 len -=
2015-07-15 13:42:27
458
原创 Node:线段树的单点更新
#include #include #include #include using namespace std;const int maxn=32010;//类似一棵二叉树,加上数据和维护的区间信息struct Node{ int l,r; int data;};//利用数组来存储二叉树Node tree[maxn*4];int ans[maxn];i
2015-07-14 17:41:37
249
原创 Node:RMQ问题之ST算法
#include #include #include using namespace std;const int maxn=1000010;const int N=1010;int data[N];int f[maxn][20];int sz;/*f[i][j]表示 i...2^j-1的最大值,即从第i个数开始连续2^j个数的最大值2^len>sz -> len*lg2>l
2015-07-14 16:45:12
347
原创 Network:socket+线程
#include #include #include using namespace std;const int maxn=10;/*服务器端*///有socket获取ipstring getIpAddressBySocket(SOCKET socket){ SOCKADDR_IN socket_addr; memset(&socket_addr,0,si
2015-07-14 16:01:13
298
原创 Node:最小堆
#include #include #include using namespace std;const int maxn=1010;int heap[maxn];int sz;//堆从下标1开始void deleteNode() //最小堆{ //,第一个节点删除,最后一个放到第一个位置,之后向下调整 heap[1] = heap[sz--
2015-07-13 21:28:19
294
原创 Node:快速排序
#include #include #include #include #include using namespace std;const int maxn=1010;int data[maxn];int sz;//快排思想:选取一个数,使得其左边所有数比他小,右边数比他大int depart(int l,int r){ //data[mid]成为标准
2015-07-13 20:50:44
419
原创 Node:普通归并
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))using namespace std;const int maxn=1010;int arr[maxn], tmp[maxn];int n,m;//向上归并的实现voi
2015-07-13 20:23:16
297
原创 Node:链式前向星
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))using namespace std;const int maxn=1010;int n,cur,m;struct Edge{ int next,to,cost;
2015-07-12 23:10:02
286
转载 Node:原地归并
#include #include #include #include #include #include #define flush(arr,i) memset(arr,i,sizeof(arr))using namespace std;const int maxn=1010;int arr[maxn];int n;//区间翻转void reverseArr(int
2015-07-12 23:06:50
287
原创 为向量法求组合问题
#include #include #include #include /* *位向量法解决组合问题,貌似是最易理解的方式 *建立一个向量,0表示不输出该位置上是字符 * 1表示输出字符 *所以这个问题太简单了,就是一个二叉树 *等到深度上限,根据向量数组输出对应的值 **/using namespace std;const int maxn
2015-04-13 23:15:17
325
原创 回溯法求排列(二)
考虑一个字符串排列问题,一个字符串的全排列可以怎么分步进行?方法一:依次排列,检查每一次填入的数字是否与之前的相同,这里要用到一个标记数组方法二:把每一个元素挨个放到第一个位置,求解后n-1个元素的全排列,显然这个也可以递归;但是,如果第一次交换的状态保留到下一次,是否会影响操作要考虑,因为递归的深搜一开始是一直往深度加深的地方走,走到头之后的操作叫做回溯,为了保证每一次开始的状态相同
2015-04-13 22:48:41
428
原创 回溯思想解排列问题(一)
搜索基本上算是算法的入门槛了,后续很多问题都是基于回溯思想的搜索性质解题的,当然这里暂且指的是深搜(这是一个递归函数,调试起来很不方便)。所以在忍了两个月之后要在这里总结一下深度搜索问题,毕竟要想在二十分钟之内解决好一道深搜题还是不容易的,关键的是,这种递归的思想熟练以后对于很多算法的递归表达就十分熟练敏感了。什么迭代加深,tarjan算法,树的直径等等……这里先说回溯法的理由,虽然经典的
2015-04-13 22:14:41
475
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人