原创 KMP中的getnext函數中的週期原理,和重要性質

----------------------- -----------------------  k    m        x      j       i 由上,next【i】=j,兩段紅色的字符串相等(兩個字符串完全相等),

原创 POJ 2533 最長上升子序列長度的求解 DP實現

#include<cstdio> #include<cstring> #define maxn 1001 using namespace std; int N;//數據個數 int a[maxn];//儲存數據 int dp[maxn]

原创 POJ 2533 求最長上升子序列長度 非DP 實現

#include<cstdio> #include<algorithm> #define maxn 1001 using namespace std; int stack[maxn],N; int main() { scanf

原创 HDU1358.cpp(KMP學習)

/*字符串長度爲n,那麼n-next[n](字符串從0開始)是最小循環節, 如果n能整除n-next[n],週期爲n/(n-next[n]); */ #include<stdio.h> #include<string.h> #d

原创 匈牙利算法

用匈牙利算法求二分圖的最大匹配 什麼是二分圖,什麼是二分圖的最大匹配,這些定義我就不講了,網上隨便都找得到。二分圖的最大匹配有兩種求法,第一種是最大流(我在此假設讀者已有網絡流的知識);第二種就是我現在要講的匈牙利算法。這個算

原创 HDU1867.cpp KMP中發生不匹配時,j=next[j],j的含義

#include<stdio.h> #include<string.h> #define size 100009 void getnext(char *p,int *next) { int i,j; nex

原创 C語言-向量基本概念

向量:既有大小又有方向的量叫向量。 向量的模:向量的長度稱爲向量的模,用符號| |表示。 零向量:長度爲0的向量 單位向量:長度爲1的向量 平面中,設有向量a={x1, y1},向量b={x2, y2},則有 (1)       向量的加

原创 hdu 2955(Robberies)

揹包變種 dp[j]表示不被抓的概率#include<cstdio> #include<algorithm> #define maxn 109 #include<cstring> using namespace std; int mo

原创 HDU1232

http://acm.hdu.edu.cn/showproblem.php?pid=1232 #include<cstdio> #include<algorithm> #define maxn 1001 using namespace s

原创 01揹包

http://acm.hdu.edu.cn/showproblem.php?pid=3466#include<cstdio> #include<algorithm> #include<iostream> #include<cstring>

原创 HDU3970.cpp

/*代碼慢慢敲,教訓*/ #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define s

原创 拓撲排序

HDU3342 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #include<vector> #include<queue> us

原创 C語言平面幾何12-向量方法判斷線段與矩形是否有交集

向量方法判斷線段與矩形是否有交集,通過向量叉乘的結果正負來判斷,當矩形在線段的某一側時,叉乘的結果要麼全正,要麼全負,此時無交集。 判斷有2步:1)快速排斥,2)叉乘。 int RSIntersection(Rectangle r,

原创 C語言平面幾何18-三角形的內心和內切圓

三角形的內心,就是其內切圓的圓心。三角形三內角平分線相交於一點,該點即爲內心。 /* 三角形的內心 */ Point Incenter(Triangle t) { Line l1 = AngleBisector(t.A, t.B, t

原创 C語言平面幾何9-兩直線的交點

求平面中兩直線的交點,當兩直線不平行時,必定只有一個交點。 /* 返回兩直線的交點 */ Point LinesIntersection(Line m, Line n, int *flag) { double d = n.A * m.