原创 回溯法經典—n-皇后問題

n-皇后問題是回溯法中經典中的經典,其基本問題描述是:在一個nxn的格子中放n個皇后,使得每個皇后不能相互攻擊,任意兩個皇后能夠互相攻擊的條件是他們在同一條對角線或者同一行或者同一列上 問題可以轉換爲從第0行開始放置皇后一直放到n-1行,

原创 LRJ生成可重複的排列

#include <iostream> using namespace std; void print_emu(int a[], int x[], int n, int cur) { if (cur == 3) { for

原创 杭電oj 2544 固定起點終點最短路徑解題報告

注:鄙人最近按照此分類來刷題,假期的最低限度是刷掉所有的DP類,並且每一道題目寫一個解題報告,如果有志同道合的朋友,歡迎加QQ 823797837共同學習交流,也可以加羣ACM新手羣161986576,老鳥飛過 Prob

原创 杭電2059解題報告

Problem Description 據說在很久很久以前,可憐的兔子經歷了人生中最大的打擊——賽跑輸給烏龜後,心中鬱悶,發誓要報仇雪恨,於是躲進了杭州下沙某農業園臥薪嚐膽潛心修煉,終於練成了絕技,能夠毫不休息得以恆定的速度(VR m

原创 回溯算法:子集樹和排列樹

假設現在有一列數a[0],a[1], ...a[n-1] ①如果一個問題的解的長度不是固定的,並且解和元素順序無關,即可以從中選擇0個或多個,那麼解空間的個數將是指數級別的,爲2^n,可以用下面的子集樹來表示所有的解(假設這裏n=4)

原创 把一個字符串的大寫字母放到字符串的後面,各個字符的相對位置不變,不能申請額外的空間

例如AbcDeFGhi ->bceiADFG 這道題目是今年騰訊的面試題,我的想法是基於冒泡的思想,從頭開始掃描,遇到小寫字母就往前面冒 初始:AbcDeFGhi 冒'b': bAcDeFGhi 冒'c': bcADeFGhi 冒'e':

原创 c++中關於explicit的一些總結

首先看下以下代碼 #include <iostream> using namespace std; class A { public: A(int v): value(v) { cout << "構造" << endl;}

原创 讓你的vim新建源文件的時候智能添加註釋和代碼

打開~/.vimrc文件,在最後一行下面添加如下代碼即可 autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" "新建.py,.cc,.java,.sh, "定義

原创 如何判斷一個單鏈表有環,並且求出交匯處

單鏈表有環的情景如下,爲了方便起見,假定入口之前的鏈表長度爲L,循環長度爲K 循環鏈表示意圖 我們可以用兩個指針,p1每次移動一格,p2每次移動兩格,初始化都爲頭結點HEAD 隨着指針慢慢推進,一定會出現以下的情況 某一時刻兩指

原创 杭電1176解題報告

原題見這裏 關於解題的詳細步驟都已經在代碼註釋裏面了,這裏一定要注意,剛開始gameboy在位置5,因此在第5秒鐘之前,他的活動範圍有限,所以,在循環的時候j的範圍不一定能從0到10 #include <iostream> using

原创 回溯法例題之子集樹:數組定和問題

問題描述:給定一個數組a和一個整數sum,在數組中取若干個數使得他們的和等於sum 問題分析:數組中的元素要麼選擇,要麼不選,且無序,每一種選擇都可以看做是解空間的一個元素 X[i] = 0或1(0<i<n, n爲數組a的長度) 如果我們

原创 菜鳥都能理解的線段樹入門經典

線段樹的定義 首先,線段樹既是線段也是樹,並且是一棵二叉樹,每個結點是一條線段,每條線段的左右兒子線段分別是該線段的左半和右半區間,遞歸定義之後就是一棵線段樹,圖示如下 圖1.線段樹示意圖 定義線段樹的數據結構 struct Li

原创 菜鳥都能理解的0-1揹包問題的空間優化

如果你不知道什麼叫做0-1揹包問題,下面是0-1揹包問題的簡單描述 假設有n件物品 每件物品的體積爲w1, w2……wn    相對應的價值爲 v1, v2.……vn。 01揹包是在n件物品取出若干件放在空間爲total_weight的揹

原创 DP系列之二進制狀態壓縮--杭電1074

狀態壓縮的意圖是用每一位二進制表示一個狀態,0表示選中狀態,1表示不選狀態,如果有N個物體,從中選擇若干個物體,那麼最終選中的狀態可以用一個N位的二進制位來表示 比如 若選擇了第1個物體和第3個物體,這種狀態爲 0...0101 //前面

原创 杭電1160解題報告

原題見這裏 題目的大概意思:有一系列老鼠,每個老鼠有體重w以及奔跑的速度s,求這樣一個最大的序列,使得 m[i+1].w > m[i].w && m[i+1].s < m[i].s 一開始,我用“DAG上的動態規劃”來解決這道題目,把每一