原创 KMP算法(C語言)

#include<stdio.h> #include<string.h> #include<iostream> void getnext(int next[],char s[],int l) { int i=1,j=0;

原创 快速排序(C++自帶)

對一個int型的長度爲n(由自己輸入)的數組進行從小到大的排序 #include<iostream> #include<stdlib.h> using namespace std; int *num; int cmp(const void

原创 一筆畫(歐拉回路)

#include<fstream> using namespace std; ifstream fin("Problem.in"); ofstream fout("Problem.out"); const int N=501; int d

原创 最長公共子序列

最長公共子序列   最長公共子序列也稱作最長公共子串(不要求連續),英文縮寫爲LCS(Longest Common Substring)。其定義是,一個數列 S ,如果分別是兩個或多個已知數列的子序列,且是所有符合此條件序列中最長的,則

原创 P1317 開心的金明

描述 Description   金明今天很開心,家裏購置的新房就要領鑰匙了,新房裏有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:“你的房間需要購買哪些物品,怎麼佈置,你說了算,只要不超過N 元錢就行”。今天一早

原创 棋盤覆蓋問題(分治)(C語言)

(棋盤覆蓋問題)在一個2k × 2k 個方格組成的棋盤中恰有一個方格與其他方格不同(圖中標記爲-1 的方格),稱之爲特殊方格。現用L 型(佔3 個小格)紙片覆蓋棋盤上除特殊方格的所有部分,各紙片不得重疊,於是,用到的紙片數恰好是(4k −

原创 最短路徑Floyd算法(C語言)

定義  Floyd算法又稱爲弗洛伊德算法,插點法,是一種用於尋找給定的加權圖中頂點間最短路徑的算法。 核心思路  通過一個圖的權值矩陣求出它的每兩點間的最短路徑矩陣。  從圖的帶權鄰接矩陣A=[a(i,j)] n×n開始,遞歸地進行n次更

原创 二分搜索法(C語言)

二分搜索法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用O(log n)完成搜索任務。它的基本思想是,將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2]則找到x,算法終止。如果x<a

原创 A+B Problem 題解綜述

從網上看到一篇關於A+B的討論,囧……轉載一下~ 【題目描述】輸入兩個自然數,輸出他們的和【輸入數據】兩個自然數x和y(0<=x,y<=32767)【輸出數據】一個數,即x和y的和【思路】 by cjf00000此題考查動態規劃思想首先我

原创 並查集(C語言)

   一道比較好的並查集題目:GangsGangs(1027)Time Limit:1000MS Memory Limit:65536K Description 1920年的芝加哥,出現了一羣強盜。如果兩個強盜遇上了,那麼他們要麼是朋友

原创 希爾排序(C語言)

      希爾排序是一種插入排序法,它出自D.L.Shell,因此而得名。Shell排序又稱作縮小增量排序。   基本思想:   不斷把待排序的對象分成若干個小組,對同一小組內的對象採用直接插入法排序,當完成了所有對象都分在一個組內的排

原创 快速排序(C語言)

 基本思想  快速排序(Quicksort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按

原创 堆排序(C語言)

定義   n個關鍵字序列Kl,K2,…,Kn稱爲(Heap),當且僅當該序列滿足如下性質(簡稱爲堆性質):   (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ n)   若將此序列所存儲的向量R[

原创 加等式(動態規劃)

 問題描述:對於一個整數集合,我們定義“加等式”如下:集合中的某一個元素可以表示成集合內其他元素之和。如集合{1,2,3}中就有一個加等式:3=1+2,而且3=1+2和3=2+1是相同的加等式,也是這個集合唯一的加等式。給定一個整數集合,

原创 矩形分割(動態規劃)

 矩形分割(cut)Description出於某些方面的需求,我們要把一塊N×M的木板切成一個個1×1的小方塊。對於一塊木板,我們只能從某條橫線或者某條豎線(要在方格線上),而且這木板是不均勻的,從不同的線切割下去要花不同的代價。而且,對