原创 uva 1378 - A Funny Stone Game sg博弈

題意:David 玩一個石子游戲。遊戲中,有n堆石子,被編號爲0..n-1。兩名玩家輪流取石子。 每一輪遊戲,每名玩家選取3堆石子i,j,k(i<j,j<=k,且至少有一枚石子在第i堆石子中), 從i中取出一枚石子,並向j,k中各放入一枚

原创 hdu3689(kmp+dp)

題意:問隨機生成一個長度爲m(m<=1000)長度的字符串,出現某個子串s的概率是多少。 解法:dp+kmp優化。ans[i][j]表示i長度,走到了s的j位置的概率,當然這是在i之前沒有出現s的前提下(在狀態轉移時候已經保證了這一點);

原创 CF 96D Volleyball(最短路套最短路)

題目鏈接:http://codeforces.com/contest/96/problem/D 題意:不超過1000個點和1000條邊的無向圖,n個點每個點有一輛出租車,給出每輛出租車能開的最遠距離和搭乘這輛車的費用,求起點到終點的最少

原创 poj3557(概率dp)

題意:給定n,p;表示n個點中任意兩點連邊的概率爲p,求生成的圖是個連通塊的概率。n<=20 解法:反向思考,ans[i]爲i個節點爲連通塊的概率,求ans[n]時候,求不爲一個連通塊的概率,然後用1減。求非連通時,枚舉與1號節點爲一個

原创 hdu4416 Good Article Good sentence (後綴數組)

題意:問a串中有多少種字符串集合B中沒有的連續子串。a的長度10^5,B中的總長度爲不超過10^5. 解法:後綴數組題目;後綴數組可以很容易算出來一個串中有多少種子串。把a和B集合連起來,求一次不同子串數量,然後減掉B相互連起來的數量。

原创 hdu1695(莫比烏斯)或歐拉函數+容斥

題意:求1-b和1-d之內各選一個數組成數對,問最大公約數爲k的數對有多少個,數對是有序的。(b,d,k<=100000) 解法1: 這個可以簡化成1-b/k 和1-d/k 的互質有序數對的個數。假設b=b/k,d=d/k,b<=d.歐

原创 hdu5106(組合數學)

題意:給一個二進制數R,長度不超過1000,問比R小並且1的個數爲n的二進制數的和是多少。 解法:其實只需要枚舉某個二進制數和R第一個1不同的位置就行了。因爲如果R某個位置的1變成了0,那麼以後01就隨便取變成了組合數的問題。求和就預處

原创 相似度(參數調節代碼)

// test1.cpp : Defines the entry point for the console application. // #include <vector> #include <cstring> #include <

原创 vim配置(.vimrc)

set nocompatible              " be iMproved, required filetype off                  " required "set th

原创 uva1627(模型轉換01揹包)

題意:有n(n<=100)個人,把他們分成非空的兩組,使得每個人都被分到一組,且同組中的人相互認識。要求兩組的成員人數儘量接近。多解時輸出任意方案,無解時輸出No Solution。 解法:如果兩人不是相互都認識,就連一條無向邊。所以就

原创 計算軌跡相似度代碼

// test1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <vector> #include

原创 uva437(經典DAG題目)

題意:有n(n<=30)中立方體,每種都有無數多個,要求選一些立方體摞成一根儘量高的柱子,立方體使用時的三種擺放方式都可以。並且使得每個立方體的底面長寬分別小於它下方的立方體的底面長寬。 解法:其中每種立方體有三種擺放方式,可以將每種轉

原创 poj2411(狀態轉移,dfs搜索轉移)

題目鏈接 題意:用1*2的小矩形拼成n*m(n,m<=11)的矩陣有多少種方案。 解法:狀態壓縮,dfs求轉移。當前一列的狀態確定後,後一列必須用橫向的矩形來填補前一列的空白格,所以前一列不爲空時,這一列可以選擇也爲空讓下一列來填補

原创 hihocoder1033(數位dp)

題目: 給定一個數 x,設它十進制展從高位到低位上的數位依次是 a0, a1, ..., an - 1,定義交錯和函數: f(x) = a0 - a1 + a2 - ... + ( - 1)n - 1an - 1 例如: f(321

原创 hdu 5136(dp計數)

題目鏈接 題意:求直徑爲K的每個點的邊數不超過3的結構相互不同構的樹有多少種? 解法:把樹的直徑拉開,兩邊就是兩棵二叉樹了。子問題:一個深度爲m的不同構的二叉樹有多少種?dp[i]表示深度爲i的個數。sum[i]表示dp的前綴和。轉移